如何解决Nginx HTTPS配置访问失败问题?

配置HTTP成功,并且所有网页皆可访问。唯独HTTPS失败,我的nginx配置文件如下

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # multi_accept on;
}

http {

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server{
        listen 443 ssl;
        server_name www.xiaoyangst.top;
        ssl_certificate /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_cert_chain.pem;
        ssl_certificate_key /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_key.key;

        location / {
            proxy_pass https://www.xiaoyangst.top:8443;
        }
    
    }

    server {
        
        listen 80;
        server_name www.xiaoyangst.top;
        root /home/xyst/XrtcDemo/myapp/build;
        index index.html;
        location / {
            try_files $uri %uri/ /index.html;
        }
        
        location /api {
                    proxy_pass http://www.xiaoyangst.top:8888;
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;
            }
         return 301 https://$server_name$request_uri;
    }    


    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

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


    gzip on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

访问情况
image.png

通过 openssl s_client -connect www.xiaoyangst.top:443 命令确保SSL和证书没有问题

后端Node.js服务正常启动,且通过PostMan工具测试后端没有问题。所以问题应该在nginx这边
image.png
image.png

我怀疑是没有把资源给到HTTPS,所以我把HTTP去掉,直接给到HTTPS

    server{
        listen 443 ssl;
        server_name www.xiaoyangst.top;
        ssl_certificate /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_cert_chain.pem;
        ssl_certificate_key /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_key.key;

        server_name www.xiaoyangst.top;
                root /home/xyst/XrtcDemo/myapp/build;
                index index.html;
                location / {
                        try_files $uri %uri/ /index.html;
                }

                location /api {
                         proxy_pass https://www.xiaoyangst.top:8443;
                         proxy_set_header Host $host;
                         proxy_set_header X-Real-IP $remote_addr;
                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                         proxy_set_header X-Forwarded-Proto $scheme;
                 }

    
    }

问题得到解决,但是我想说如何既可以配置HTTP,还可以配置HTTPS呢?

就是访问HTTP可以成功,访问HTTPS也可以成功,难道只能选择再Copy一份吗?(因为不很熟悉nginx)

阅读 1.3k
1 个回答

你需要调整三处

  • 第一,Nginx这层作为代理,它配置了证书等,然后转发请求给本地Web程序。 本地Web程序只需启动一个http的服务即可,即本例中只要保留 8888端口那个服务即可,让80和443端口访问Nginx后都转发给这个8888。
  • 第二,Nginx配置中,ssl一段,将 proxy_pass https://www.xiaoyangst.top:8443; 改为 proxy_pass http://localhost:8888;
  • 第三,调整80端口的Nginx配置,改为(只要三行)

    server {
          listen 80;
          server_name www.xiaoyangst.top;
          return 301 https://$host$request_uri;
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题