【问题标题】:Nginx refuses to listen on port 443Nginx 拒绝监听 443 端口
【发布时间】:2020-05-28 10:13:40
【问题描述】:

我在使用 nginx 时遇到问题,它不会在端口 443 上侦听。

监听 80 端口没问题。我在下面包含了我的配置的 sn-p:

server {
       listen 443 ssl default_server;
       listen [::]:443 ssl default_server;

       ssl on;
       ssl_certificate     /var/www/certs/server.pem;
       ssl_certificate_key /var/www/certs/server.key;

       server_name server;

       root /var/www/server;

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

       index index.php;
}

不知道我哪里出错了。我检查的所有内容都表明它应该可以正常工作。

我在 Ubuntu 18.04 和 nginx 1.14.0 系统上没有防火墙,我和服务器之间也没有。 我也用nginx -tsystemctl reloaded 多次检查了配置。没有变化,端口不为我打开。

【问题讨论】:

    标签: ssl nginx https nginx-config


    【解决方案1】:

    要配置 HTTPS 服务器,必须在服务器块中的侦听套接字上启用 ssl 参数,并指定服务器证书和私钥文件的位置:

    server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
    

    }

    单个 HTTP/HTTPS 服务器 可以配置一个同时处理 HTTP 和 HTTPS 请求的服务器:

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

    }

    在 0.7.14 之前,无法选择性地为单个侦听套接字启用 SSL,如上所示。只能使用 ssl 指令为整个服务器启用 SSL,因此无法设置单个 HTTP/HTTPS 服务器。添加了 listen 指令的 ssl 参数来解决此问题。因此不鼓励在现代版本中使用 ssl 指令。

    基于名称的 HTTPS 服务器 配置两个或多个 HTTPS 服务器侦听单个 IP 地址时会出现一个常见问题:

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

    }

    server {
    listen          443 ssl;
    server_name     www.example.org;
    ssl_certificate www.example.org.crt;
    ...
    

    }

    【讨论】:

    • 如果您阅读了我的问题,它包含了我的部分配置,其中包括 ssl 指令、cert-pem 和密钥。
    • 监听 443 ssl default_server;听 [::]:443 ssl default_server;你也这样做了两次。这有什么原因吗?试试听 443 ssl;
    • 那些可以同时捕获 ipv4 和 ipv6。
    【解决方案2】:

    添加这些服务器块。

    这是将http重定向到https

    server {
       listen 80;
       server_name example.com; 
       location / {
              return 301 https://$host$request_uri;
       }
    }
    

    你的 ssl 主块

    server {
        listen 443 ssl ;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;  
        index index.html index.htm index.nginx-debian.html;
        server_name example.com; 
        location / {
        proxy_pass http://localhost:5003; // Your port goes here
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    }
    

    还要检查端口是否打开

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 2014-10-12
      • 1970-01-01
      • 2023-03-09
      • 2019-07-08
      • 2017-07-12
      相关资源
      最近更新 更多