在同一个 nginx 服务器下定义两个监听(80 和 443)是否正确?

adr*_*TNT 4 ssl nginx https web-server httpd.conf

像这样在相同的情况下定义两者listen(80和 443)是否正确?server {}

另一种方法是server{}为每个端口定义两个单独的端口,我知道这是可以的。

server {

    listen       80 default_server;
    server_name  example.com;
    root         /usr/share/nginx/html;

    location / {

    }


    listen example.com:443 ssl; # <<< !!!

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;         
}
Run Code Online (Sandbox Code Playgroud)

Ter*_*nen 6

允许监听同一个server块上的多个端口,但如果您想这样做,这取决于您的目标。

就个人而言,当我有以下一组域并且我想用https://www.example.com作主域时,我使用以下设置:

http://example.com
https://example.com
http://www.example.com
https://www.example.com
Run Code Online (Sandbox Code Playgroud)

serverexample.com端口 80 和 443的块:

server {
    server_name example.com;
    listen 80;
    listen 443 ssl http2;

    ssl_certificate ...;
    ssl_certificate_key ...;

    return 301 https://www.example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

server块重定向所有进入http://example.comhttps://example.com发送到 的请求https://www.example.com

http://www.example.com然后,和总共有两个块https://www.example.com

server {
    listen 80;

    server_name www.example.com;

    return 301 https://www.example.com$request_uri;
}

server {
    listen 443 ssl;

    server_name www.example.com;

    ssl_certificate ...;
    ssl_certificate_key ...;

    ... rest of config ...
}
Run Code Online (Sandbox Code Playgroud)