我想将多个域(所有指向同一个服务器)代理到不同的服务(在不同的端口上运行)。
基本上,我想运行 2-3 个 Web 服务器(例如,在 docker-compose 设置中使用 Gitea、Postgres、Nginx 和 Certbot 来获取 HTTPS 证书的 Gitea)。我希望尽可能保持通用性,因此我希望避免使用需要了解所有特定服务及其证书的单个 Web 服务器。这意味着服务应保持原样。
我当前将域代理到唯一端口的解决方案如下:
# /etc/nginx/nginx.conf
events {}
http {
server {
listen 80;
server_name domain1.example.org;
location / {
proxy_pass http://localhost:8080;
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-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name domain2.example.org;
location / {
proxy_pass http://localhost:9080;
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-Forwarded-Proto $scheme;
}
}
}
stream {
map $ssl_preread_server_name $name {
domain1.example.org domain1;
domain2.example.org domain2;
}
upstream domain1 {
server localhost:8443;
}
upstream domain2 {
server localhost:9443;
}
server {
listen 443;
proxy_pass $name;
ssl_preread on;
}
}
虽然这有效,但我想知道是否有更好/更简单的解决方案来解决这个问题,特别是在 HTTP 部分?