我正在将我的服务从虚拟机移至 Docker 容器。我已经移动了几个 Web 应用程序,确认它们可以正常工作,最后决定移动我的 nginx。
将 nginx 移至 docker 后,我的所有 webapps 均无响应。我已确认,nginx 虚拟主机不起作用。只有使用 IP 地址访问时,默认配置才有效。它似乎无法获取有关请求中使用的域的详细信息。
我的虚拟主机配置示例:
server {
listen 80;
server_name my_domain.eu;
access_log /var/log/nginx/my_domain.eu.access.log;
error_log /var/log/nginx/my_domain.eu.error.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.88.196:8080;
}
error_page 500 502 503 504 /default.html;
location ~* /default\.(jpg|html)$ {
root /var/www/tomcat/errors;
}
}
我的 docker 使用 macvlan 驱动程序配置了自定义网络。我的所有容器都有一个静态 IP 地址。我使用默认的 nginx docker 镜像。以下是文件的相关部分docker-compose.yml
:
nginx:
container_name: nginx
image: nginx
volumes:
- nginx_config:/etc/nginx/
- nginx_static:/var/www/
networks:
pub_net:
ipv4_address: 192.168.88.193
ports:
- "80:80"
restart: on-failure
正如我所说,我已经通过检查日志和使用 IP 地址访问服务器确认 nginx 正常工作。
我怀疑我的 docker 配置有些问题,因为我所做的唯一更改是没有更改 nginx 配置。如果您能提供任何提示和技巧,告诉我哪里可能出错以及应该查看哪里,我将不胜感激。
配置流量时,我总是使用容器的 IP 地址,而不是主机的 IP 地址。