对于nginx,我是否正在侦听此URL https:// localhost:3000的端口443或端口3000?

时间:2020-04-07 13:43:34

标签: django http nginx webserver

我试图浏览nginx和反向代理传递的杂草,而令我感到困惑的一个领域是端口映射。这是一个示例nginx配置文件:

server {
    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name www.domain.com;
    passenger_enabled on;
    root /home/ubuntu/app/public;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;
}

我在这里指定的是我的应用程序应该监听端口443,因为它上面有一个自签名证书。它不接受端口80 http,而仅接受443。这是我发现的有关proxy_passing到localhost的示例。这是我想做的。这是示例:

server {
    listen       443;
    server_name  localhost;

    ssl                  on;
    ssl_certificate      server.crt;
    ssl_certificate_key  server.key;
    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
      proxy_pass          http://localhost:3000;
      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-Client-Verify  SUCCESS;
      proxy_set_header    X-Client-DN      $ssl_client_s_dn;
      proxy_set_header    X-SSL-Subject    $ssl_client_s_dn;
      proxy_set_header    X-SSL-Issuer     $ssl_client_i_dn;
      proxy_read_timeout 1800;
      proxy_connect_timeout 1800;
    }
}

这是我不了解的内容,可以澄清一下。在第二个示例中,我正在听哪个端口/ URL?在服务器块中,我看到以下内容:

    listen       443;
    server_name  localhost;

这意味着我们正在通过https听localhost上的443。到目前为止,这很容易理解。现在我们进入location块。

   location / {
      proxy_pass  http://localhost:3000;

这是怎么回事?如果我启动nginx并在地址栏中输入http:localhost:3000,会发生什么?我输入http会失败吗?不应该是https:localhost:3000吗?我在监听80、443或3000端口吗?

还有一个小问题。如果打开邮递员应用程序并使用第二种配置在http://localhost:3000https://localhost上键入get请求,将会发生什么情况?它会打到Nginx服务器还是尝试访问我的笔记本电脑的本地主机?

1 个答案:

答案 0 :(得分:0)

您所需的参考使用已贬值的ssl on指令

看看http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl

指定要监听的端口时,需要按方案(HTTP | HTTPS)将它们分组

示例服务器块如下

server {
    listen 80 http2 default_server;
    listen [::]:80 http2 default_server;

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;

    server_name www.domain.com;
    passenger_enabled on;
    root /home/ubuntu/app/public;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;
}