I bought a domain name using namecheap, for simplicities' sake lets' call it example.com. I am running nginx on a Debian based VPS.
I want to set up the following configuration
However I can't wrap my head around configuring the subdomain using nginx, or is that something I need to do using Namecheaps control panel?
This is my configuration on Namecheap:
No subdomains are configured, Should I configure subdomains here!?
And here is my nginx configuration:
server {
root /var/www/blog;
index index.html index.htm;
server_name localhost example.com www.example.com;
location / {
index index.html index.htm;
}
}
server {
root /var/www/static;
index index.html index.htm;
server_name static.example.com www.static.example.com;
location / {
index index.html index.htm;
}
However this leads to the following:
www.example.com points to the correct destination
random.example.com points to www.example.com (I don't want this to happen, it should return a 404)
static.example.com gives me an error 400. If i look into my logs it can't find the file /var/www/blog/static/index.html, while actually I want it to point to /var/www/static/index.html
You have to keep in mind that setting up DNS and configuring nginx are entirely different tasks.
The way I like to setup my DNS is to do a CNAME
from www
and other subdomains back to the original domain, if they are logically the same, and hosted on the same server. (However, technically, it's incorrect, because it means that you specify that all of your domains have MX
records, as well as TXT
/ SPF
records showing that they could be used for mail. But noone really cares, so, as long as you don't have your TLD itself as a CNAME
, things should be fine.)
You don't see a 404
from random.example.com
because the first server
becomes your default server. To avoid this, you might want to have an extra server
context with a listen
directive having a default_server
parameter, where you can unconditionally return 404;
for all requests.
The reason your final server
context might not be working may perhaps be due to a missing listen
directive. It usually helps to have an identical listen
directive between all of your servers.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With