如何在默认的nginx服务器中完全禁用/重写HTTPS?

时间:2015-04-04 15:14:39

标签: ssl nginx

我没有主域证书,所以我在自己的几个开发域中使用了自我证明的证书。

我这样用:

server {
    listen       443;
    server_name  secure.somehost.com;

    ssl on;
    ssl_certificate /etc/nginx/ssl/secure.crt;
    ssl_certificate_key /etc/nginx/ssl/secure.key;
}
server {
    listen         80;
    server_name    secure.somehost.com;
    rewrite        ^ https://$server_name$request_uri? permanent;
}

现在我的所有https请求(例如https://anyhost.somehost.com/)都以某种方式被重写为https://secure.somehost.com。所以我想禁用此行为并为默认服务器关闭HTTPS,理想情况下将重写发送到简单HTTP(或简单地发送500错误)。

我试过这段代码。但由于我没有证书,我想我无法发送适当的回复。

server {
    listen 443 default;
    rewrite ^(.*) http://$host$1 permanent;
}

我必须使用default服务器,因为我也处理了很多子域和外部域。

1 个答案:

答案 0 :(得分:1)

如果要将https请求(在端口443上)重定向到http(在端口80上),则应在服务器块中包含SSL证书和密钥指令,如下所示: / p>

# redirect all default http requests to http://example.com
server {
    listen 80 default_server;
    server_name _;
    access_log off;
    return 301 $scheme://example.com$request_uri;
}

# redirect all https requests to http://example.com
server {
    listen 443 ssl;
    server_name _;

    # ssl certificate and private key
    ssl_certificate /etc/nginx/ssl/secure.crt;
    ssl_certificate_key /etc/nginx/ssl/secure.key;

    # you can add additional ssl parameters here (like the protocols
    # and ciphers you want nginx to use).

    return 301 http://example.com$request_uri;
}

只需将重定向的目标网址更改为您要使用的默认域/子网址。

如果您使用的是自签名证书,浏览器仍会提示您并说明证书不受信任。在浏览器的缓存中将其作为例外添加后,连接应该无需浏览器停止,每次都将其标记为不受信任。