学习路之Nginx--不同域名的反向代理
学习路之Nginx--不同域名的反向代理
- 一、准备
- 二、修改配置:增加2个server
- 三、完成
- 四、补充
常规反向代码。可参考:https://blog.csdn.net/hopetomorrow/article/details/137798880
一、准备
已在阿里云已解析的可用域名
zzz.85798.net 、 lll.85798.net
这2个域名都是指向47.112.111.11:80
直接浏览器可访问
二、修改配置:增加2个server
主要内容:
server
{listen 80;server_name lll.85798.net;root /www/wwwroot/www.pull.com;
根据不同域名转发到不同目录
完整配置文件:
server
{listen 80;server_name 47.112.111.11;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/www.gong.com/public;#CERT-APPLY-CHECK--START# 用于SSL证书申请时的文件验证相关配置 -- 请勿删除include /www/server/panel/vhost/nginx/well-known/47.112.111.11.conf;#CERT-APPLY-CHECK--END#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则#error_page 404/404.html;#SSL-END#ERROR-PAGE-START 错误页配置,可以注释、删除或修改#error_page 404 /404.html;#error_page 502 /502.html;#ERROR-PAGE-END#PHP-INFO-START PHP引用配置,可以注释或修改include enable-php-80.conf;#PHP-INFO-END#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效include /www/server/panel/vhost/rewrite/47.112.111.11.conf;#REWRITE-ENDlocation /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /www/rtmp;}#禁止访问的文件或目录location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md){return 404;}#一键申请SSL证书验证目录相关设置location ~ \.well-known{allow all;}#禁止在证书验证目录放入敏感文件if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {return 403;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;error_log /dev/null;access_log /dev/null;}location ~ .*\.(js|css)?${expires 12h;error_log /dev/null;access_log /dev/null;}location /gongsi/ {proxy_pass http://47.112.111.11:82/;}access_log /www/wwwlogs/47.112.111.11.log;error_log /www/wwwlogs/47.112.111.11.error.log;
}server
{listen 80;server_name lll.85798.net;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/www.pull.com;#CERT-APPLY-CHECK--START# 用于SSL证书申请时的文件验证相关配置 -- 请勿删除include /www/server/panel/vhost/nginx/well-known/47.112.111.11.conf;#CERT-APPLY-CHECK--END#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则#error_page 404/404.html;#SSL-END#ERROR-PAGE-START 错误页配置,可以注释、删除或修改#error_page 404 /404.html;#error_page 502 /502.html;#ERROR-PAGE-END#PHP-INFO-START PHP引用配置,可以注释或修改include enable-php-80.conf;#PHP-INFO-END#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效include /www/server/panel/vhost/rewrite/47.112.111.11.conf;#REWRITE-ENDlocation /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /www/rtmp;}#禁止访问的文件或目录location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md){return 404;}#一键申请SSL证书验证目录相关设置location ~ \.well-known{allow all;}#禁止在证书验证目录放入敏感文件if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {return 403;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;error_log /dev/null;access_log /dev/null;}location ~ .*\.(js|css)?${expires 12h;error_log /dev/null;access_log /dev/null;}access_log /www/wwwlogs/47.112.111.11.log;error_log /www/wwwlogs/47.112.111.11.error.log;
}server
{listen 80;server_name zzz.85798.net;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/www.push.com;#CERT-APPLY-CHECK--START# 用于SSL证书申请时的文件验证相关配置 -- 请勿删除include /www/server/panel/vhost/nginx/well-known/47.112.111.11.conf;#CERT-APPLY-CHECK--END#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则#error_page 404/404.html;#SSL-END#ERROR-PAGE-START 错误页配置,可以注释、删除或修改#error_page 404 /404.html;#error_page 502 /502.html;#ERROR-PAGE-END#PHP-INFO-START PHP引用配置,可以注释或修改include enable-php-80.conf;#PHP-INFO-END#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效include /www/server/panel/vhost/rewrite/47.112.111.11.conf;#REWRITE-ENDlocation /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root /www/rtmp;}#禁止访问的文件或目录location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md){return 404;}#一键申请SSL证书验证目录相关设置location ~ \.well-known{allow all;}#禁止在证书验证目录放入敏感文件if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {return 403;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;error_log /dev/null;access_log /dev/null;}location ~ .*\.(js|css)?${expires 12h;error_log /dev/null;access_log /dev/null;}access_log /www/wwwlogs/47.112.111.11.log;error_log /www/wwwlogs/47.112.111.11.error.log;
}
三、完成
四、补充
一、基础配置原理
通过Nginx的server_name指令匹配域名,结合proxy_pass指定目标端口56:nginx
Copy Code
server {listen 80;server_name domain1.com; # 域名1location / {proxy_pass http://127.0.0.1:8080; # 转发到8080端口proxy_set_header Host $host;}
}server {listen 80;server_name domain2.com; # 域名2location / {proxy_pass http://127.0.0.1:8081; # 转发到8081端口proxy_set_header Host $host;}
}
访问domain1.com的请求会被转发到本机8080端口5;
访问domain2.com的请求则转发到8081端口6。
二、关键注意事项
域名解析配置
需确保域名已解析到Nginx服务器的公网IP(本地测试可修改/etc/hosts文件)5:text
Copy Code
192.168.1.100 domain1.com
192.168.1.100 domain2.com
请求头传递
通过proxy_set_header保留原始请求信息,避免后端服务丢失上下文49:nginx
Copy Code
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
HTTPS支持
若需支持HTTPS,需为每个域名配置SSL证书并监听443端口6:nginx
Copy Code
server {listen 443 ssl;server_name domain1.com;ssl_certificate /path/to/cert.pem;ssl_certificate_key /path/to/key.pem;location / {proxy_pass http://127.0.0.1:8080;}
}
三、高级场景扩展
子域名转发
支持将不同子域名(如api.domain.com、blog.domain.com)转发到不同端口7:nginx
Copy Code
server {listen 80;server_name api.domain.com;location / {proxy_pass http://127.0.0.1:3000;}
}
动态域名映射
结合变量实现动态转发(需Nginx支持Lua等扩展)1:nginx
Copy Code
location /dispatch {set $target_upstream $arg_up; # 从参数获取目标地址proxy_pass http://$target_upstream;
}
四、典型应用场景
多项目共存:同一服务器部署多个服务,通过不同域名隔离访问25。
微服务网关:将api.service.com转发至网关端口,web.service.com转发至前端端口57。
测试环境隔离:使用dev.domain.com和prod.domain.com区分环境6。