如何使用 nginx 为 https 和 http 提供相同的内容?

如何使用 nginx 为 https 和 http 提供相同的内容?

通常我的 nginx 配置如下所示:

server {
    listen       80;
    server_name  example.com;

    <some long config>
}

server {
    listen       443;
    server_name  example.com;

    ssl                 on;
    ssl_certificate     qwe.crt;
    ssl_certificate_key qwe.key;

    <the same long config>
}

如何将所有 https 请求转发到 http 服务器指令(不将重定向发送到客户端而是在 nginx 内转发),这样我就不需要两次编写相同的配置?

答案1

找到解决方案:

server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;

    <some long config>
}

答案2

您只有两个服务器指令......

  • 一个监听 80 端口并进行重写
  • 另一个监听 443 端口,是你的主配置

当然,您也可以反过来做(将 https 重定向到 http),这没有什么区别。

在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https?

server {
       listen         80;
       server_name    my.domain.com;
       rewrite        ^ https://$server_name$request_uri? permanent;
}

server {
       listen         443;
       server_name    my.domain.com;

       ssl            on;

       [....]
}

相关内容