【问题标题】:How to configure Nginx to redirect http 80 traffic to https 8443 port如何配置 Nginx 将 http 80 流量重定向到 https 8443 端口
【发布时间】:2019-03-18 01:07:21
【问题描述】:

我有一个 Springboot 应用程序在端口 8443 上的云机器上运行。在同一台机器上我有一个 Nginx 服务器。

今天我访问https://www.example.com,它工作正常,但如果我输入 www.example.com 并尝试访问它不会重定向到https://www.example.com

也就是说,所有http 80的流量都应该重定向到https 8443

这是我的配置(Springboot app + Nginx)

Springboot 应用程序.properties

server.port=8443
security.require-ssl=true
server.ssl.key-store=/etc/letsencrypt/live/www.example.com/keystore.p12
server.ssl.key-store-password=www.example.com
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=myAlias

Nginx /etc/nginx/nginx.conf

pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {

    log_format formatWithUpstreamLogging '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request';

    #main log format
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                               '$status $body_bytes_sent "$http_referer" '
                               '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log main;
    error_log   /var/log/nginx/error.log;

    server {

        listen 80;

        server_name www.example.com example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        # managed by Certbot
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass https://localhost:8443/;
                proxy_redirect http://localhost:8443/ https://localhost:8443/;
       }

    }

}

有人可以帮我解决这个问题吗?

提前致谢

【问题讨论】:

    标签: spring-boot nginx


    【解决方案1】:

    我认为你应该做的是设置一个重定向服务器到 https,然后为主服务器添加 ssl(创建 Nginx 配置文件的备份以防出现问题):

    Nginx /etc/nginx/nginx.conf中:

    pid /run/nginx.pid;
    
    events {
        worker_connections 768;
    }
    
    http {
    
        log_format formatWithUpstreamLogging '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request';
    
        #main log format
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                   '$status $body_bytes_sent "$http_referer" '
                                   '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log main;
        error_log   /var/log/nginx/error.log;
    
        server {
            listen 80 default_server;
            server_name www.example.com example.com;
            return 301 https://$server_name$request_uri;
        }
    
        server {
            listen 8443 ssl default_server;
            server_name www.example.com example.com;
    
            ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
            # managed by Certbot
            location / {
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $host;
                    proxy_set_header X-NginX-Proxy true;
                    proxy_pass https://localhost:8443/;
                    proxy_redirect http://localhost:8443/ https://localhost:8443/;
           }
    
        }
    
    }
    

    【讨论】:

    • 我已经尝试过您的解决方案,但它与应用程序端口 8443 冲突。这是来自应用程序日志的错误:“org.apache.catalina.LifecycleException: Protocol handler start failed (...)原因:java.net.BindException:地址已在使用中“
    • 尝试在 nginx.conf 文件中将 8443 改为 443。
    • 现在我在浏览器中收到此错误:“重定向您太​​多次。尝试清除您的 cookie。ERR_TOO_MANY_REDIRECTS”。我不知道这是否有帮助,但我正在使用 Cloudflare 将我的域重定向到这台云机器。这有什么改变吗?
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2019-02-02
    • 2019-08-26
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多