![nginx 忽略 server_name 和 default_server](https://linux22.com/image/746770/nginx%20%E5%BF%BD%E7%95%A5%20server_name%20%E5%92%8C%20default_server.png)
我想从同一个 IP 为两个域名提供服务。这是我的配置:
http {
log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
listen [::]:80;
server_name mysite1.com;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
server {
listen 80;
listen [::]:80;
server_name mysite2.com;
root /var/www/mysite2.com;
access_log /var/log/nginx/mysite2.com main;
}
server {
listen 8443 ssl;
listen [::]:8443 ssl;
server_name mysite1.com;
client_max_body_size 232m;
ssl_certificate "/etc/pki/nginx/all.crt";
ssl_certificate_key ....
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /static/ {
proxy_cache_revalidate on;
alias /usr/share/nginx/static/;
add_header Vary Accept-Encoding;
open_file_cache_valid 1s;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://127.0.0.1:9443;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
问题是我永远无法获取 /var/www/mysite2.com/index.html 的内容。我总是获取 mysite1 的内容。如果我将 mysite2.com 切换到端口 81,那么它会在端口 81 上提供正确的页面,因此此服务器块可以正常工作。我尝试将 default_site 设置为 mysite2,但这没有帮助,我总是从 mysite1 获取内容。此外,在日志中我从未看到对 mysite2 的请求,即使它正在提供服务(/var/log/nginx/mysite2.com 为空)。
我该如何解决这个问题?尝试谷歌搜索,阅读其他答案,但都无济于事。
答案1
我设法解决了这个问题。问题不在于 nginx 设置本身,而在于有另一台服务器正在运行(该服务器应该通过隧道连接)。并且另一台服务器占用了 http 端口,nginx不会警告你该端口已被占用,因此不太容易发现。这种情况可能对任何人来说都适用。