拉取nginx镜像
docker pull nignx
查看虚拟机内镜像
启动nginx看看是否成功
docker run -d --name "nginx" -p 80:80 nginx
启动后打开浏览器访问一下,确认是否可用
接下来我想修改 nginx.conf 配置文件,我们需要把我们自己定义的 nginx.conf挂载在 docker 中的nginx
首先创建挂载目录
mkdir -p /usr/dokcer_nginx_data/{conf,conf.d,html,log}
自定义 nginx.conf 文件
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://39.98.173.195:8080/;
index dashboard index;
proxy_set_header Host $http_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;
}
}
注意这里的 proxy_pass 不能设置为 127.0.0.1,需要设置为公网IP,否则nginx无法识别,目前不知是什么原因,我猜想是docker无法识别127.0.0.1吧
文件创建成功后,上传到 /usr/dokcer_nginx_data/conf 目录下
现在来通过docker重新启动nginx
docker run --name nginx -d -p 80:80 -v /usr/dokcer_nginx_data/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/dokcer_nginx_data/log:/var/log/nginx -v /usr/dokcer_nginx_data/html:/usr/share/nginx/html nginx
第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件
第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志
第三个-v:挂载静态页面目录
nginx反向代理非80端口的问题
以上是代理一个80端口,我们再来反向代理其他端口,例如9090
修改 nginx.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://39.98.173.195:8080/;
index dashboard index;
proxy_set_header Host $http_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;
}
}
server {
listen 9090;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://39.98.173.195:8080/;
index dashboard index;
proxy_set_header Host $http_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或者删除nginx容器重新创建
测试发现
http://39.98.173.195:8080/docker/findUser 可以访问
http://39.98.173.195:80/docker/findUser 可以访问
http://39.98.173.195:9090/docker/findUser 无法访问
为什么最后一个会无法访问? 原因未知,但是我找到了解决办法
再启动一个nginx容器,注意端口映射
docker run --name nginx1 -d -p 9090:9090 -v /usr/dokcer_nginx_data/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/dokcer_nginx_data/log:/var/log/nginx -v /usr/dokcer_nginx_data/html:/usr/share/nginx/html nginx
部署静态网页
把 html 文件放在 /usr/dokcer_nginx_data/html 文件夹下,稍后映射到 nginx 容器中
更新 nginx.conf
server {
listen 8088;
server_name localhost;
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
}
启动一个新的 nginx
docker run --name nginx1 -d -p 8088:8088 -v /usr/dokcer_nginx_data/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/dokcer_nginx_data/log:/var/log/nginx -v /usr/dokcer_nginx_data/html:/usr/share/nginx/html nginx
打开浏览器访问即可
注意:有的人会遇到监听 80 端口访问 html 时候,报错 404 ,确认配置文件无误后,原因是:
Nginx的docker容器中,有一个默认配置文件 /etc/nginx/nginx.conf 。还有一个默认放配置文件的目录 /etc/nginx/conf.d。nginx 会加载目录conf.d 下的 *.conf 文件。如果这些 .conf 文件的内容和 /etc/nginx/nginx.conf 文件有冲突,那么nginx会默认用 conf.d 目录下的文件配置去覆盖 nginx.conf 文件里面的配置。nginx 容器的 conf.d 目录下有个 default.conf 配置文件。
首先 进入容器
docker exec -it 容器ID /bin/bash
删除该文件,重新启动即可
rm default.conf