我有一个反向代理5服务器configuration设置,但是,自从开始,它总是抱怨不能监听我指定的端口,所以服务器无法启动。
我已经尝试了几件事情:
sites-availableconfiguration分割为多个文件sites-available并创build符号链接以sites-enabled listen属性,并允许它回退到默认值 ipv6only=on – 导致错误 [::]:80 81等 使用netstat我可以看到,没有什么是我需要的端口上运行,当我运行nginx -t我得到一个成功的输出说句法是好的,nginx.conftesting成功。
这是我的nginx输出:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:81 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:82 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:83 failed (98: Address already in use) nginx: [emerg] bind() to 0.0.0.0:84 failed (98: Address already in use)
有人知道这是为什么吗? 提前致谢
编辑: lsof -Pni | grep LISTEN lsof -Pni | grep LISTEN输出:
sshd 1288 root 3u IPv4 15712 0t0 TCP *:22 (LISTEN) sshd 1288 root 4u IPv6 15714 0t0 TCP *:22 (LISTEN) nginx 14025 root 6u IPv6 852470 0t0 TCP *:80 (LISTEN) nginx 14025 root 7u IPv6 852471 0t0 TCP *:443 (LISTEN) nginx 14026 www-data 6u IPv6 852470 0t0 TCP *:80 (LISTEN) nginx 14026 www-data 7u IPv6 852471 0t0 TCP *:443 (LISTEN) dnsmasq 23894 dnsmasq 5u IPv4 650875 0t0 TCP *:53 (LISTEN) dnsmasq 23894 dnsmasq 7u IPv6 650877 0t0 TCP *:53 (LISTEN)
这是我的服务器configuration:
server { listen 80; server_name hac-staging-proxy.redant.cloud; location / { proxy_pass http://195.219.8.212/; proxy_set_header Host www.uat2prd.halfordsautocentres.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; } } server { listen 81; server_name halfords-c1-staging-proxy.redant.cloud; location / { proxy_pass http://195.219.8.206/; proxy_set_header Host www.c1.uat2prd.halfordsautocentres.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; } } server { listen 82; server_name halfords-c2-staging-proxy.redant.cloud; location / { proxy_pass http://195.219.8.206/; proxy_set_header Host www.c2.uat2prd.halfordsautocentres.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; } } server { listen 83; server_name halfords-staging-proxy.redant.cloud; proxy_redirect http://www.uat2prd.halfords.com http://halfords-staging-proxy.redant.cloud; proxy_redirect https://www.uat2prd.halfords.com https://halfords-staging-proxy.redant.cloud; location / { add_header Set-Cookie Experiment=FH; resolver 127.0.0.1; proxy_pass http://www.uat2prd.halfords.com; # sub_filter_types *; sub_filter 'www.uat2prd.halfords.com' 'halfords-staging-proxy.redant.cloud'; sub_filter 'www.c1.uat2prd.halfords.com' 'halfords-c1-staging-proxy.redant.cloud'; sub_filter 'www.c2.uat2prd.halfords.com' 'halfords-c2-staging-proxy.redant.cloud'; sub_filter_once off; proxy_set_header Set-Cookie Experiment=FH; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; } } server { listen 84; server_name halfords-staging-proxy.redant.cloud2; proxy_redirect https://www.uat2prd.halfords.com https://halfords-staging-proxy.redant.cloud; proxy_redirect http://www.uat2prd.halfords.com http://halfords-staging-proxy.redant.cloud; ssl_certificate /etc/nginx/domain.cert; ssl_certificate_key /etc/nginx/domain.key; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl on; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "INTENTIONALLY REMOVED" ssl_prefer_server_ciphers on; location / { add_header Set-Cookie Experiment=FH; resolver 127.0.0.1; proxy_pass https://www.uat2prd.halfords.com; # proxy_ssl_session_reuse off; # sub_filter_types *; sub_filter 'www.uat2prd.halfords.com' 'halfords-staging-proxy.redant.cloud'; sub_filter 'www.c1.uat2prd.halfords.com' 'halfords-c1-staging-proxy.redant.cloud'; sub_filter 'www.c2.uat2prd.halfords.com' 'halfords-c2-staging-proxy.redant.cloud'; sub_filter_once off; proxy_set_header Set-Cookie Experiment=FH; proxy_set_header Host www.uat2prd.halfords.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_buffering off; } }
在听[::]:80'的同时不要听'80'(对于443端口也是这样)。
原因是在双栈IPv4 / IPv6主机上,如果您在IPv6 TCP端口X上侦听,并且在IPv4 TCP端口X上没有监听,您将同时获得这两个端口。 如果你看到一个连接是:: ffff:1.2.3.4(其中1.2.3.4是一个IPv4地址),那么这就是发生了什么事情。 这被称为IPv4映射的IPv6地址。
这个,当nginx去监听IPv4端口80(0.0.0.0:80)的时候,会遇到这样的事实,即它也是有效的(通过[::]:80)。
围绕这个行为有很多实现细节,但是除非你精通networking编程,否则我不会在这里提及它们。
希望有帮助,卡梅隆