我应该使用哪个端口作为从 nginx 到 Apache 2 的反向代理?

我应该使用哪个端口作为从 nginx 到 Apache 2 的反向代理?

我已将 nginx 设置为事实上的端口80。我想在 Apache2 上设置 django+mod_wsgi。我担心如果我离开 Apache280会导致冲突。

是不是最好避免这种麻烦,将 Apache 改为不同的端口呢?

server {
    listen 80;
    server_name work.domain.org;

    access_log /www/work.domain.org/log/access.log;
    error_log /www/work.domain.org/log/error.log;

    location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_redirect 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;
        proxy_set_header        X-Magic-Header "secret";
        client_max_body_size       10m;
    }
}

答案1

通常,您希望反向代理监听客户端将要连接的端口。因此,在这种情况下,您希望 nginx 位于端口 80 上。Apache 端口实际上并不重要,只要端口不是无用的,它就可以是端口 80在同一台服务器上,使用相同的 IP

因此,如果您的反向代理机器没有运行 Apache,它们都可能是 80。您还可以在主机上有一个辅助 IP,并让 Apache 绑定到该 IP /端口对,并让 nginx 和 Apache 在同一台机器上监听端口 80(只是不同的 IP)。

例如(nc 监听指定的 IP 和端口):

#Add Secondary IP:
$ sudo ifconfig eth0:1 192.168.2.1 netmask 255.255.255.0
# Listen on primary IP:
$ nc -l -p 20200 -s 192.168.1.2
#Listen on Secondary IP in another Terminal
$ nc -l -p 20200 -s 192.168.2.1
Show in Yet another Terminal
$ sudo netstat -tapnl | grep 20200 
tcp        0      0 192.168.2.1:20200       0.0.0.0:*               LISTEN      440/nc          
tcp        0      0 192.168.254.82:20200    0.0.0.0:*               LISTEN      428/nc 

答案2

我想我已经回答了我自己的问题:

Starting web server: apache2(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
 failed!
invoke-rc.d: initscript apache2, action "start" failed.
Press return to continue.

无法绑定到同一个端口,因此我必须选择另一个。我敢发誓,虽然有人提到将两者都设置为端口 80,但我猜我读错了。

答案3

您可以将它们绑定到同一端口,但绑定在不同的接口上。​​例如,您可以将前端绑定到端口 80 上的外部 IP,并将后端绑定到端口 80 上的本地主机。

相关内容