用例:
- 使用 nginx 作为在 80 和 443(多个虚拟主机)上运行的多个网站/服务的前端。
- 在服务于 http:8090 和 https:8099 的 localhost 上运行服务 x
我需要如何配置 nginx,以便人们可以仅使用名称访问,而无需指定端口。
这是一个相当正常的设置。像往常一样配置直接在 Nginx 上服务的主机。由于他们需要同时监听 80 和 443,因此每个主机条目都将包含以下内容:
server {
listen 80;
listen 443 ssl;
}
Nginx SSL 文档有完整的细节。
然后将一个定义的流量代理server{}
到后端服务:
server {
server_name example.com;
location / { proxy_pass http://127.0.0.1:8090; }
}
您只需要一个到后端服务器的代理连接,“http”或“https”。如果两台服务器之间的连接是安全的,您可以使用“http”,即使对于通过 https 到达 nginx 的连接也是如此。如果服务在同一台机器上,这可能是合适的。否则,如果需要保护 nginx 和后端服务器之间的连接,则可以通过 https 代理所有流量。
我们在主机上使用以下内容:
http {
server {
server_name ~^(www\.)?(?<domain>.+)$;
listen *:80;
location / {
proxy_pass $scheme://<origin>$uri$is_args$args;
include basic-proxy-settings.conf;
}
}
server {
server_name ~^(www\.)?(?<domain>.+)$;
listen *:443 ssl;
location / {
proxy_pass $scheme://<origin>$uri$is_args$args;
include basic-proxy-settings.conf;
}
include ssl-settings.conf;
}
}
这允许我们的上游代理在客户端请求不安全资源时通过 HTTP 与源服务器通信,并在请求安全资源时通过 SSL/HTTPS 与源服务器通信。它还允许我们的源服务器负责强制重定向到安全连接等。
下一次,为什么不提供一个代码示例,详细说明您尝试过的、有效的以及无效的?