我的服务器上安装了 nginx,配置文件如下
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。而不是 website.com 虚拟主机。
我做错了什么?
答案1
您假设 Nginx 的行为与 Apache 类似。:)
http://nginx.org/en/docs/http/server_names.html http://wiki.nginx.org/NginxHttpCoreModule#服务器名称
基本上。如果没有匹配的服务器块,它将使用带有 [default|default_server] 标志的匹配监听指令的服务器块,如果没有找到,它将使用定义的第一个服务器块。
在您的情况下,您没有与 IP 匹配的服务器阻止,也没有列为默认的服务器阻止,因此它使用第一个定义的服务器阻止。