nginx将HTTPS重定向到HTTP

ken*_*eno 30 https nginx http-redirect

如何从https重定向到http?

我有下面的代码,但它似乎不起作用.

server {
        listen 443;
        server_name example.com;
        rewrite ^(.*) http://example.com$1 permanent;
 }
Run Code Online (Sandbox Code Playgroud)

bru*_*upm 23

上面的答案将起作用,您需要生成自签名证书(或具有真实证书)并配置nginx:

server {
  listen *:443;
  ssl on;
  server_name domain.com;
  rewrite ^(.*) http://domain.com$1 permanent;

  ssl_certificate      /data/certs/domain.crt;
  ssl_certificate_key  /data/certs/domain.key; 
 }
Run Code Online (Sandbox Code Playgroud)

请记住,如果它是自签名证书,浏览器会给你一个丑陋的警告.

  • 你也可以替换``rewrite ^(.*)http://domain.com $ 1 permanent;`````rewrite ^(.*)http:// $ host $ 1 permanent;``如果你有多个服务器名指定. (4认同)
  • ``listen*:443``,``listen 443``和``listen 443 ssl``有什么区别? (4认同)
  • 如果不购买我们不会使用的证书,是否不能在没有丑陋警告的情况下进行此重定向?谢谢! (2认同)

krd*_*krd 15

建立jberger的评论应该有效的配置:

server {
    listen *:80;
    server_name example.com;
}

server {
    listen              *:443 ssl;
    server_name         example.com;
    ssl_certificate     /etc/ssl/certs/example.com.cert;
    ssl_certificate_key /etc/ssl/private/example.com.key;
    return 301 http://$server_name$request_uri;
}
Run Code Online (Sandbox Code Playgroud)


cou*_*lix 1

    if ($host = 'foo.com') {
        rewrite  ^/(.*)$  http://www.foo.com$1  permanent;
    }
Run Code Online (Sandbox Code Playgroud)

  • nginx [陷阱](http://wiki.nginx.org/Pitfalls#Server_Name) 和 [IfIsEvil](http://wiki.nginx.org/IfIsEvil)。这段代码可能应该重构为两个独立的“server”块,一个捕获http,另一个捕获https,然后执行“return 301 http://$server_name$request_uri;”。 (7认同)