一个关于nginx的脑抽小测试
nginx能用作代理,也能用作http,那么有没有一种可能,一个nginx即当代理,同时又代理自己呢?
明显不能啊(不敢说绝对,可能有办法吧,只是自己不知道),有毛病,设置了代理,那么访问端口就直接代理,代理再访问自己,然后继续代理,当时也是大脑出故障了。
在vm准备了两台linux虚拟机,一台有docker,另一台没有。
有docker的准备了两个端口:8080和8081,没docker的只准备了8080。
IPADDR:192.168.2.131 8080 8081
IPADDR:192.168.2.132 8080
192.168.2.131先在docker装个nginx(当然,在此之前要准备一个Docker)
docker pull nginx:latest --拉取镜像 docker run --name nginx-test -p 8080:80 -d nginx --启动容器
然后在主机访问一下192.168.2.131:8080,哎哟,访问不了。
在192.168.2.131查看一下firewalld,发现防火墙打开状态
systemctl status firewalld
然后看看是否开放了8080端口和http服务,发现都没有,于是添加http服务和8080端口
firewall-cmd --list-all
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --reload
在主机刷新一下,发现可以了。
随后在192.168.2.132装一个nginx,同理,开放8080端口和http服务(因为没有装docker,这里的nginx要手动启动服务)
在主机访问一下192.168.2.132:8080,没有出错。
在192.168.2.131里找到default.conf文件,添加代理。
cd /var/lib/docker/overlay2 find . -name default.conf
--这时不出意外有default.conf,因为docker装nginx时没有设路径,只能这样找了
--找到关键字merged/etc/nginx
--复制整行
vim ./4d680f719cd52384905d23cd3062a60b863dee4e477bcd8711184db3ee4f3774/merged/etc/nginx/conf.d/default.conf
--在顶行添加
upstream test_server{
server 192.168.2.131:8080;
server 192.168.2.132:8080;
}
--在server块的location / { 里添加
proxy_pass http://test_server;
修改后大致如下:
upstream my_server{ server 192.168.2.131:8080; server 192.168.2.132:8080; } server { listen 80; listen [::]:80; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root html; proxy_pass http://my_server; index index.html index.htm; }
...
这里就是脑抽的地方,192.168.2.131:8080是用nginx作代理的,然后又代理192.168.2.131:8080,我代理我自己?不过当时是这样做的。
修改一下192.168.2.132:8080的index.html,随便修改点什么,能看出和192.168.2.131:8080的index.html不一样就行了。
然后在主机访问192.168.2.131:8080,然后一直刷新,发现一直是192.168.2.132:8080的页面信息。
于是在192.168.2.132的default.conf也修改成192.168.2.131:8080的配置,然后在主机访问192.168.2.132:8080,发现直接访问不了了。
真的脑抽,192.168.2.132:8080代理访问192.168.2.131:8080,然后192.168.2.131:8080代理访问192.168.2.132:8080,纯纯套娃。
然后醒悟过来,在192.168.2.131的docker添加一个nginx端口选用8081(操作同上),在两台虚拟机的upstream里添加一行
server 192.168.2.131:8081
然后在主机访问192.168.2.131:8080和192.168.2.132:8080,发现都指向192.168.2.131:8081。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)