我试图浏览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:3000
或https://localhost
上键入get请求,将会发生什么情况?它会打到Nginx服务器还是尝试访问我的笔记本电脑的本地主机?
答案 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;
}