我有我的服务器上的nginx设置与以下configuration文件
worker_processes 2; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; access_log logs/mysite.access.log; error_log logs/mysite.error.log; gzip on; gzip_min_length 1100; gzip_buffers 4 8k; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 75 20; server { listen 80; server_name website.com www.website.com; location / { include proxy.conf; proxy_pass http://127.0.0.1:5000; proxy_redirect default; if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)$") { expires max; break; } } } server { listen 443 default ssl; server_name website.com www.website.com; ssl_certificate /etc/ssl/localcerts/website.com.crt; ssl_certificate_key /etc/ssl/localcerts/website.com.key; location / { include proxy.conf; proxy_pass http://127.0.0.1:5000; proxy_redirect default; if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)$") { expires max; break; } } } }
这意味着当我访问“website.com”时,它会将请求发送到127.0.0.1:5000,我会看到网站在那里运行,对吧? 问题是,如果我访问服务器的IP地址,我看到网站上运行website.com
来自Apache VHosts,这是错误的…访问IP应该显示我默认的nginx HTML文件或404。不是网站的虚拟主机。
我做错了什么?
你假定Nginx的行为就像Apache一样。 🙂
http://nginx.org/en/docs/http/server_names.html http://wiki.nginx.org/NginxHttpCoreModule#server_name
基本上。 如果没有匹配的服务器块,它将使用带有与[default | default_server]标志匹配的listen指令的服务器块,如果没有find,它将使用定义的第一个服务器块。
在你的情况下,你没有服务器阻塞匹配的IP,你没有列出的默认服务器块,所以它使用第一个定义。