我可以在端口 80 上运行两个服务器应用程序吗?

Mar*_*ark 6 networking python nginx domain port

我目前在端口 80 上运行 nginx,配置的服务器名称为example.comwww.example.com

我还有一个Flask应用程序,我想通过端口 80 访问它,但使用主机名app.example.com

由于 nginx 已经在使用端口 80,我将如何将app.example.com请求路由到 Flask 应用程序?

请注意,服务器只有一个 IPv4 地址。

Tom*_*nor 4

应该相当容易。

确保 Flask 本身运行在 80 以外的端口上。

然后使用 NginX 作为反向代理(和网络服务器)来处理 app.example.com 的子域,然后将其作为 localhost:8080 (或您的 Flask 应用程序绑定的任何地方)的代理处理。

upstream flask  {
      server 127.0.0.1:8080; #Flask
}

server {
    listen       YOUR_PUBLIC_IP:80;
    server_name  app.example.com;

location / {
     proxy_pass  http://flask;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }

}
Run Code Online (Sandbox Code Playgroud)

您可以拥有许多 server{} 块,全部位于端口 80 上,只要 server_name 不同,并像 Apache VirtualHosts 一样使用它们。