同一端口上的两个 nginx 服务器块

同一端口上的两个 nginx 服务器块

我需要:

  • 两个 Web 服务应在同一端口 (80) 上提供服务。
  • 一项服务仅应提供给本地主机。

服务器配置(两个单独的文件,按此顺序包含)是:

server {
    listen 127.0.0.1:80;

    location /app {
        index index.html;
        alias /var/www/app;
    }
}

server {
    listen *:80 default_server;

    location /static {
        alias /var/www/static;
    }
    location / {
        uwsgi_pass  django;
        include     /path/to/uwsgi_params;
    }
}

问题:第一台服务器可以工作,但是对于需要由第二台服务器处理的请求,我得到 404。

  • 我试过bind在两个服务器块中分别执行listen指令,这会导致错误“端口已被使用”。

解决方案/解决方法:

  • 对第一个服务器使用不同的端口(可以,因为唯一的客户端在本地主机上)。

答案1

在我看来,使用 2 个块是没有意义的,如果您希望 /app 只能从 127.0.0.1 访问,您可以使用 allow 来限制它,并且只使用一个块来为所有服务,因为我正确理解了您的请求,因为它是通用的。

Server {
    listen *:80 default_server;
    location /app {
        index index.html;
        alias /var/www/app;
        allow 127.0.0.1
        deny all
    }
    location /static {
        alias /var/www/static;
    }
    location / {
         include     /path/to/uwsgi_params;
       uwsgi_pass  django;
    }
}

由于我没有太多信息,其中应该定义“django”,我将其作为您当前一般问题的通用解决方案。

答案2

不要使用两个服务器块。要么有多个 IP,要么使用位置指令

答案3

在两个块中指定 IP,例如 127.0.0.1 为本地 IP,89.89.89.89 为非本地主机 IP。

您在第二个中使用了 *:80,其中包括 127.0.0.1。

相关内容