使用nginx构建服务器并实现反向代理
首先
我尝试使用nginx实现了反向代理。
http:[ip地址]/ ⇒ 反向代理服务器兼web服务器
http:[ip地址]/web2 ⇒ web服务器2
设定文件
version: "3"
services:
ngweb1:
image: nginx:1.21.6
ports:
- 80:80
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./nginx/conf.d:/etc/nginx/conf.d
ngweb2:
image: nginx:1.21.6
ports:
- 81:80
volumes:
- ./nginx/html:/usr/share/nginx/html
对于“/”的情况,将连接到ngweb1容器,而对于“/ngweb2/”的情况,将连接到ngweb2容器。
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /web2/ {
proxy_pass http://ngweb2/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
容器之间可以使用容器的服务名称进行通信。
需要注意的是,如果在“proxy_pass http://ngweb2/”中最后的斜杠“/”不存在,将会返回HTTP状态码404。因为如果没有最后的斜杠(尾随斜杠),它会尝试去ngweb1容器的/usr/share/nginx/html/web2目录寻找index.html文件。
博客
如果发现网页服务器的访问日志是空的,想要确认的话,可以通过使用 docker-compose logs 服务名 来查看日志。
最后
不需要考虑端口号,可以区分Web服务器,非常方便。
我学到了有关尾部斜杠的知识。