通用的 Nginx 配置,通过 反向代理 将不同的域名指向本机的不同服务。所有的虚拟主机都会监听 80 端口,但通过不同的 server_name
来访问不同的服务。
配置示例
假设你有多个服务运行在本机的不同端口上(例如 8080, 8081, 8082 等),并且你希望通过不同的域名来访问这些服务。
配置结构:
service1.com
访问本机的服务(比如:端口 8080)。service2.com
访问本机的服务(比如:端口 8081)。service3.com
访问本机的服务(比如:端口 8082)。
Nginx 配置文件
server {
listen 80;
server_name service1.com www.service1.com;
location / {
proxy_pass http://127.0.0.1:8080; # 转发到本机的 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 service2.com www.service2.com;
location / {
proxy_pass http://127.0.0.1:8081; # 转发到本机的 8081 端口
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 service3.com www.service3.com;
location / {
proxy_pass http://127.0.0.1:8082; # 转发到本机的 8082 端口
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_name
:每个server
块都有不同的server_name
,这会让 Nginx 根据请求的域名来决定应该使用哪个配置块来处理请求。proxy_pass
:将请求反向代理到本机的不同端口(如 8080、8081、8082 等)。这里假设你有三个服务分别运行在这些端口。proxy_set_header
:这些指令确保 Nginx 正确地传递一些头信息,保留客户端的原始请求信息,包括:X-Real-IP
:客户端的真实 IP 地址。X-Forwarded-For
:通过代理传递的 IP 地址链。X-Forwarded-Proto
:用于知道请求使用的协议(HTTP 或 HTTPS)。Host
:客户端请求的域名。
访问方式
- 当用户访问
http://service1.com
时,Nginx 会将请求反向代理到本机的http://127.0.0.1:8080
。 - 当用户访问
http://service2.com
时,Nginx 会将请求反向代理到本机的http://127.0.0.1:8081
。 - 当用户访问
http://service3.com
时,Nginx 会将请求反向代理到本机的http://127.0.0.1:8082
。
注意事项
- DNS 配置:确保你在 DNS 上正确配置了
service1.com
,service2.com
,service3.com
等域名,使其指向你的服务器 IP。 - 服务端口:确保目标服务(例如,8080、8081、8082 等)已经在本地正确启动,并且能响应请求。
- 防火墙设置:确保防火墙允许 Nginx 访问这些服务端口。
小结
通过这种方式,你可以利用不同的域名来访问本机的不同服务,且不需要为每个服务单独配置不同的端口,所有的请求都通过 80 端口进行访问,非常适合做反向代理。
Nginx 设置强制 HTTPS,并代理本机端口!
Nginx 设置强制 HTTPS,且将 HTTP 请求(80端口)重定向到 HTTPS,同时将 HTTPS 的请求反向代理到本机的 8090 端口。这样一来,用户访问该项目时,Nginx 会强制使用 HTTPS 并通过反向代理将请求转发到本机的服务。
下面是一个配置示例,假设你的项目需要通过 https://yourdomain.com
来访问。
Nginx 配置示例:
# HTTP 到 HTTPS 强制重定向
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
# 强制重定向到 HTTPS
return 301 https://$host$request_uri;
}
# HTTPS 反向代理到本机的 8090 端口
server {
listen 443 ssl;
server_name yourdomain.com www.yourdomain.com;
# SSL 配置
ssl_certificate /etc/nginx/ssl/yourdomain.crt; # 你的 SSL 证书
ssl_certificate_key /etc/nginx/ssl/yourdomain.key; # 你的证书私钥
ssl_protocols TLSv1.2 TLSv1.3; # 启用的 SSL 协议
ssl_prefer_server_ciphers off; # 客户端选择密码套件优先
# 配置 HTTP 头部
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
# 反向代理配置
location / {
proxy_pass http://127.0.0.1:8090; # 将请求代理到本机的 8090 端口
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;
}
}
配置说明:
HTTP 到 HTTPS 强制重定向:
- 第一个
server
块监听 80端口(HTTP),并通过return 301 https://$host$request_uri;
强制将所有 HTTP 请求重定向到 HTTPS。 - 这种方式确保了用户无论是否输入
http
,都能被自动重定向到https
。
- 第一个
HTTPS 配置:
- 第二个
server
块监听 443端口(HTTPS),并配置了 SSL 证书和密钥。 ssl_certificate
和ssl_certificate_key
分别指定了你的 SSL 证书文件和私钥文件的路径。ssl_protocols
用于配置启用的协议和密码套件,这样可以提高安全性。add_header Strict-Transport-Security
启用了 HTTP 严格传输安全(HSTS),强制客户端在一定时间内仅通过 HTTPS 访问该站点。
- 第二个
反向代理配置:
proxy_pass
将 HTTPS 请求转发到本机的http://127.0.0.1:8090
,即你的私密项目服务。proxy_set_header
配置了正确的头部,以便 Nginx 在代理请求时能够传递客户端的真实 IP 和请求协议。
证书和私钥:
确保你已经有了一个有效的 SSL 证书文件(例如 yourdomain.crt
)和私钥文件(例如 yourdomain.key
)。如果没有,可以通过像 Let’s Encrypt 这样的免费证书颁发机构获取证书。
配置生效:
- 检查 Nginx 配置语法:配置完成后,可以使用以下命令检查配置文件是否有错误:
sudo nginx -t
- 重载 Nginx 配置:如果没有错误,重载 Nginx 以应用新的配置:
sudo systemctl reload nginx
小结
通过这个配置,你的 Nginx 会做以下几件事:
- 强制将所有访问
http://yourdomain.com
的请求重定向到https://yourdomain.com
。 - 通过 HTTPS 访问时,将请求反向代理到本机的 8090 端口,并传递必要的头部信息。
如果你有任何其他问题或需要进一步的帮助,随时告诉我!😊