nginx 默认所有请求都发送到 vhost

nginx 默认所有请求都发送到 vhost

我的服务器上安装了 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 匹配的服务器阻止,也没有列为默认的服务器阻止,因此它使用第一个定义的服务器阻止。

相关内容