带有 SSL 的 Nginx Vhosts

带有 SSL 的 Nginx Vhosts

我在 nginx 服务器上运行了 3 个域名,并且使用了 SSL

域名.pw 域名.info 域名.mobi

我已经启用了 sni,并且为每个站点使用一个 vhost。

该网站的主机记录都是这样的

A Record: @ <IP ADDRESS> 1800
A Record: www <IP ADDRESS> 1800

conf 文件都是这样的。除了一个问题外,它们基本上都按预期完成工作(我稍后会详细说明,现在我将解释您在下面看到的配置文件)

步骤 1 server_name(第一条评论)将 www 流量重定向到非 www

步骤 2server_name将端口 80 上的 http:// 流量重定向到 https://

步骤 3server_name是通过 ssl 从端口 443 提供页面服务的实际服务器代码。

log_format  www.domain.pw  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';

#redirects www traffic to domain.pw

server {
    server_name  www.domain.pw;
    rewrite ^(.*) https://domain.pw$1 permanent;
}

#redirect http traffic to https
server {
        listen   80;
        server_name domain.pw;
        return 301 https://$server_name$request_uri;
}

#server and ssl configuration.       
server {
        listen   443;
        server_name domain.pw;
        index index.php;
        root  /home/wwwroot/www.domain.pw;
        ssl on;
        #enables SSLv3/TLSv1, but not SSLv2 which is weak and should no longer be used.
        ssl_protocols SSLv3 TLSv1.2;
        #Disables all weak ciphers
        ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
        ssl_certificate /usr/local/nginx/ssl/domains/domain.pw.crt;
        ssl_certificate_key /usr/local/nginx/ssl/domains/domain.pw.pem;

        include other.conf;
        location ~ .*\.(php|php5)?$
            {
                try_files $uri =404;
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                include fcgi.conf;
            } 
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }

        location ~ .*\.(js|css)?$
            {
                expires      12h;
            }



        access_log  /home/wwwlogs/www.domain.pw.log  www.domain.pw;
        error_page   404  =  /access_denied.php;
        error_page   403  =  /access_denied.php;
}

问题

www.domain.info重定向至https://domain.info

www.domain.mobi重定向至https://domain.mobi

www.domain.pw重定向至https://domain.info <<< 哎呀!这是什么鬼?>>>

笔记:此问题仅在www重定向没有工作正常时存在。

请帮忙,这个事情已经困扰我好几天了,我弄乱了我的配置文件,重新启动了我的服务器,重新颁发了我的 SSL 证书,但无论如何总是导致错误。为什么?

答案1

您的 HTTP 到 HTTPS 重定向存在微妙错误:

        return 301 https://$server_name$request_uri;

这使用块中定义的服务器名称server,这可能不是您想要的,特别是当您使用单个server块来重定向多个域时。

相反,使用:

        return 301 https://$http_host$request_uri;

这将使用客户端提供的域。

相关内容