新服务器在 HTTPS 请求上随机添加端口 7081

JM4*_*JM4 0 php nginx https

我刚刚安装了一个在后端运行 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;
}
Run Code Online (Sandbox Code Playgroud)

站点虚拟主机 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新1

我认为这一定与HTTPS中切换目录有关。同一域级别上存在的任何页面(例如联系我们页面)都不会导致此错误。但是,一旦从子目录(例如管理站点)建立 https 连接,就会发生端口 7081(这是自 NGINX 接管 443 端口以来为 Apache 新重新配置的 ssl 端口)。

更新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/
Run Code Online (Sandbox Code Playgroud)

更新3

我注意到,如果将尾部斜杠添加到实际链接中,则问题不会再发生。这几乎就像 NGINX 正在获取请求的 URI,尝试以文件形式访问目录,并将其传递给 Apache,从而导致 301 重定向。添加尾部斜杠可以消除此问题,但这并不完全是我希望的解决方案。当然 NGINX 中有一个配置可以解决这个问题。

小智 5

到目前为止提供的答案都是针对 NGINX 配置的,这使得它们成为有效的答案,但是我发现Plesk v11 服务器的实际问题(即本例中的情况)在于Plesk服务器上的Apache配置错误

迄今为止,Plesk 尚未提供修复程序,但他们确实提供了一些解决方法:

http://kb.parallels.com/en/114425

请注意,链接到的文章引用了 PHP 代码,但该问题也更普遍地适用于 Apache 级别。默认情况下,Apache 倾向于将文件夹(例如 /test)重定向到其“正确”的 url 等效项(例如 /test/),但是由于 Apache 在 Plesk v11 服务器上的端口 7080 和 7081 上运行,并且 Apache 没有被运行,因此此重定向失败。配置来处理这些场景。