我已将 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 上的本地主机。