需求:生产环境上,我们这边网络权限他们开不了,想从被人系统的ng跳转到我们ng,这个需要怎么做?总之就是人家ng有外网权限,通过人家ng访问我们ng,然后我们用人家域名。
答:
如果想要通过别人项目的Nginx(简称“外网Nginx”)来访问自己环境的Nginx(简称“内部Nginx”),并且你还希望使用别人的域名,
那么这通常涉及到在外网Nginx上设置一个反向代理来转发请求到你的内部Nginx。
第一步:
操作步骤:
在外网Nginx上配置反向代理
命令:vim /etc/nginx/nginx.conf
添加:
server {
listen 80; #监听80端口,这是HTTP的默认端口。如果您想使用HTTPS,请改为listen 443 ssl;,并添加SSL证书的配置
server_name external.example.com; # 这里填外网Nginx的域名
location /internal/ { # 这里/internal/是你希望用户访问的路径前缀
rewrite ^/internal/(.*)$ /$1 break; #当请求的URL以/internal/开头时,将/internal/部分去掉,然后将剩余部分的URL转发到内部的Nginx
proxy_pass http://internal-nginx-address:8080; # 替换internal-nginx-address为你的内部Nginx地址,8080是内部Nginx监听的端口
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;
# 如果内部Nginx使用了基于Host的虚拟主机,需要保留Host头不变
# proxy_set_header Host $host; 改为 proxy_set_header Host internal.example.com;
}
# 其他location块...
}
注意:
1、的配置中,rewrite指令用于去除URL中的/internal/部分,以便你的内部Nginx能够正确处理请求。
但是,这取决于你的内部Nginx如何配置以及你希望如何暴露你的服务。如果你的内部Nginx期望看到/internal/作为URL的一部分,那么你应该省略rewrite指令。
2、Host的虚拟主机是一种在Web服务器(如Apache、Nginx等)上实现多网域服务的技术。
它允许在一台物理服务器或服务器群上,通过识别请求中的Host头部信息来区分和托管多个网站或服务。
判断是否配置基于Host的虚拟主机的方法:
①检查Nginx配置文件:如果nginx.conf配置文件中有多个server块,且每个块中的server_name都指定了不同的域名,那么可以初步判断Nginx配置了基于Host的虚拟主机;
②检查网站目录和文件:Host的虚拟主机通常会在Nginx的配置文件中指定不同的根目录(通过root指令)或索引文件(通过index指令),用于存放不同域名对应网站的内容。
可以检查这些目录和文件是否存在,并确认其内容是否与域名相对应。
第二步:重启外网Nginx
第三步:测试配置
通过在外网Nginx的域名后加上你配置的路径前缀(在这个例子中是/internal/)来测试配置是否工作正常。你应该能够看到你的内部Nginx服务器的响应。