我刚刚在后端安装了一台运行 NGINX 的新 LAMP 服务器。虽然这种情况并非每次都发生,但某些 HTTPS 请求正在 URL 中寻找端口 7081。例如:
- http://www.nacdbenefits.com看起来很好
- 点击联系我们即可重定向到 https
- 单击页面右下角的链接(我的管理员)会显示端口 7081,一旦登录页面就会导致错误。
这是 NGINX 的预期行为吗?我相信这几乎肯定与 NGINX 有关,因为禁用它(并且仅运行 apache)不会产生此错误。
NGINX 会议
#user nginx;
worker_processes 1;
#error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
#pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#tcp_nodelay on;
#gzip on;
#gzip_disable "MSIE [1-6]\.(?!.*SV1)";
server_tokens off;
include /etc/nginx/conf.d/*.conf;
}
站点 vhost nginx 配置
#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.
server {
listen 216.70.86.230:443 ssl;
server_name nacdbenefits.com;
server_name www.nacdbenefits.com;
server_name ipv4.nacdbenefits.com;
ssl_certificate /usr/local/psa/var/certificates/cert-rcx4WK;
ssl_certificate_key /usr/local/psa/var/certificates/cert-rcx4WK;
ssl_client_certificate /usr/local/psa/var/certificates/cert-Wj9EsP;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 128m;
location / {
proxy_pass https://127.0.0.1:7081;
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-Accel-Internal /internal-nginx-static-location;
access_log off;
}
location /internal-nginx-static-location/ {
alias /var/www/vhosts/nacdbenefits.com/httpdocs/;
access_log /var/www/vhosts/nacdbenefits.com/statistics/logs/proxy_access_ssl_log;
add_header X-Powered-By PleskLin;
internal;
}
}
server {
listen 216.70.86.230:80;
server_name nacdbenefits.com;
server_name www.nacdbenefits.com;
server_name ipv4.nacdbenefits.com;
client_max_body_size 128m;
location / {
proxy_pass http://127.0.0.1:7080;
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-Accel-Internal /internal-nginx-static-location;
access_log off;
}
location /internal-nginx-static-location/ {
alias /var/www/vhosts/nacdbenefits.com/httpdocs/;
access_log /var/www/vhosts/nacdbenefits.com/statistics/logs/proxy_access_log;
add_header X-Powered-By PleskLin;
internal;
}
}
更新 1
我认为这一定与在 HTTPS 中切换目录有关。任何页面都存在于同一域级别(例如联系我们页面),不会导致此错误。但是,一旦从子目录(例如管理站点)建立 https 连接,就会使用端口 7081(这是 Apache 新重新配置的 SSL 端口,因为 NGINX 接管了 443 端口)。
更新2
使用 Firebug - 我注意到我的服务器似乎正在应用自动 301 重定向。注意:我当前的 .htaccess 文件中没有这个,所以不确定它来自哪里:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Wed, 15 Aug 2012 22:27:50 GMT
Content-Type: text/html; charset=iso-8859-1
Content-Length: 314
Connection: keep-alive
Location: https://www.nacdbenefits.com:7081/myadmin/
更新 3
我注意到,如果在实际链接中添加尾部斜杠,则不再出现此问题。这几乎就像 NGINX 正在获取请求的 URI,尝试将目录作为文件访问,并将其传递给 Apache,从而导致 301 重定向。添加尾部斜杠可以消除此问题,但这并不是我所希望的解决方案。NGINX 中肯定有一个配置可以解决此问题。
答案1
到目前为止提供的答案都是针对 NGINX 配置的,这使得它们成为有效的答案,但我发现实际的问题Pleskv11 服务器(即本例的情况)存在配置错误阿帕奇在Plesk服务器
到目前为止,Plesk 尚未提供修复程序,但他们确实提供了一些解决方法:
http://kb.parallels.com/en/114425
请注意,链接的文章引用了 PHP 代码,但该问题在 Apache 级别也更普遍。默认情况下,Apache 会将文件夹(例如 /test)重定向到其“正确”的 URL 等效项(例如 /test/),但由于 Apache 在 Plesk v11 服务器上的端口 7080 和 7081 上运行,并且 Apache 未配置为处理这些情况,因此此重定向失败。
答案2
发生的事情是
https://www.nacdbenefits.com/myadmin
重定向至:
https://www.nacdbenefits.com:7081/myadmin/
因此,您必须查看 www.nacdbenefits.com:443 中的 /myadmin/(这是您的 nginx 服务器吗?)以查看是什么导致了此重定向。
我猜测有一个 .htaccess 或其他文件导致重定向到新的 url。
如果你想知道该端口上托管的内容,请使用
lsof -i tcp:443
这将显示这是 Apache 还是 nginx 服务器。您发布的是 nginx 初始化脚本,而不是 nginx 配置文件。
希望这能给你一些继续前进的动力!
答案3
您的配置有问题。如果您描述您的架构并发布 nginx 和 apache 配置,IT 将会提供帮助。
https://www.nacdbenefits.com:7081/绝对是可以公开访问的,因此您确实在该端口上运行了一些程序。
答案4
由于后端服务器返回的重定向与 中写入的内容不匹配proxy_pass
,因此默认设置proxy_redirect
不适合您,您必须proxy_redirect
自行配置。以下方法应该可以解决问题:
proxy_redirect https://www.nacdbenefits.com:7081/ /;
看文档了解详情。