如何在同一个 nginx 服务器上设置 2 个域,第一个使用 HTTPS,第二个使用 HTTP?

如何在同一个 nginx 服务器上设置 2 个域,第一个使用 HTTPS,第二个使用 HTTP?

我有一个像这样的 nginx 配置 第一区块:

server {
    listen       80;
    server_name abcd.info;
    return 301  https://$host$request_uri;
        }

    server {
        listen  443 ssl http2 default_server;
        server_name abcd.info;
        root /srv/www/abcd; ## <== Your only path reference.
        #ssl    on;
    .....
    .....
    }

第二区块

server {
listen 80;
server_name tapash.ddns.com;
root    /srv/www/ddns.com;
index   index.php;

......
....
}

对于第一个网站,我想永久通过 HTTPS 进行设置。我面临的问题是通过 HTTP 为第二个网站提供服务。但每次它都会自动重定向到 HTTPS 并获取第一个网站的 SSL 证书。我尝试调整配置但似乎没有什么不同。有人能解释一下吗?

答案1

site1.example.net

server {
    listen 192.168.1.1;
    server_name site1.example.net;

    root /vhosts/site1/public_html;

    location / {
        add_header X-DEBUG "HTTP:[site1.example.net]" always;
    }

}

site2.example.net

server {
    listen 192.168.1.1:80;
    server_name site2.example.net;

    return 301 https://$host$request_uri;

    add_header X-DEBUG "HTTP:[site2.example.net]" always;
}

server {
    listen  443 ssl hhtp2;
    server_name site2.example.net;

    root /vhosts/site2/public_html;

    ssl_certificate /etc/pki/nginx/server.crt;
    ssl_certificate_key /etc/pki/nginx/server.key;
    ssl_session_timeout 5m;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:!RC4:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK';
    ssl_prefer_server_ciphers on;

    add_header X-DEBUG "HTTPS:[site2.example.net]" always;
}

正常运行,http 上的 site1 没有重定向

# curl -I http://site1.example.net
HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Tue, 23 Feb 2016 09:08:37 GMT
Content-Type: text/html
Content-Length: 45
Last-Modified: Tue, 23 Feb 2016 08:54:51 GMT
Connection: keep-alive
ETag: "56cc1e5b-2d"
X-DEBUG: HTTP:[site1.example.net]
Accept-Ranges: bytes


# curl -I http://site2.example.net
HTTP/1.1 301 Moved Permanently
Server: nginx/1.9.11
Date: Tue, 23 Feb 2016 09:08:43 GMT
Content-Type: text/html
Content-Length: 185
Connection: keep-alive
Location: https://site2.example.net/
X-DEBUG: HTTP:[site2.example.net]


# curl -I https://site2.example.net/
HTTP/1.1 200 OK
Server: nginx/1.9.11
Date: Tue, 23 Feb 2016 09:08:58 GMT
Content-Type: text/html
Content-Length: 45
Last-Modified: Tue, 23 Feb 2016 08:55:02 GMT
Connection: keep-alive
ETag: "56cc1e66-2d"
X-DEBUG: HTTPS:[site2.example.net]
Accept-Ranges: bytes

PS 您的网络浏览器中可能存在一些缓存。您尝试过清除缓存吗?

答案2

您可能在另一个服务器块中使用了服务器块,或者我只是看到了格式错误的块。但真正的问题是您使用的 default_server 标记。删除它。

我建议在 /sites-available/ 文件夹中使用两个单独的文件,分别名为 abcd.info 和 tapash.ddns.com。

您需要将文件放在 /etc/nginx/sites-available/ 文件夹中,然后在 sites-enabled 中创建指向这些文件的符号链接,如下所示:

ln -s /etc/nginx/sites-available/abcd.info /etc/nginx/sites-enabled/abcd.info
ln -s /etc/nginx/sites-available/tapash.ddns.com /etc/nginx/sites-enabled/tapash.ddns.com

最后但非常重要的一点是删除 /etc/nginx/sites-enabled/default

因为在常规 nginx 安装中,这是将被处理的默认文件。并且 /sites-enabled 中的任何文件都将被处理。

如果你在本地主机上操作,请确保你的主机文件中有 tapash.ddns.com 和 abcd.info 的记录

相关内容