nginx 忽略 server_name 和 default_server

nginx 忽略 server_name 和 default_server

我想从同一个 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不会警告你该端口已被占用,因此不太容易发现。这种情况可能对任何人来说都适用。

相关内容