Docker运行nginx挂载文件及反向代理

在部署nginx时遇到了坑,最主要的问题是在挂载文件和文件夹的时候不知道怎么挂载,现总结如下:

1. 拉去nginx镜像

docker pull nginx

2. (关键)查看nginx镜像里面配置文件、日志等文件的具体位置,只有找到镜像配置文件的路径,后面挂载文件和文件夹才能覆盖这些路径

  • 以终端的方式打开镜像容器
docker exec -it nginx bash
  • 找到镜像中nginx.conf配置文件
    路径:/etc/nginx/nginx.conf
    使用命令:cat /etc/nginx/nginx.conf 查看nginx.conf文件内容然后拷贝出来
  • 找到default.conf配置文件
    路径:/etc/nginx/conf.d/default.conf
    用命令:cat /etc/nginx/conf.d/default.conf 查看default.conf文件内容然后拷贝出来
  • 找到默认首页文件夹html
    路径:/usr/share/nginx/html
  • 找到日志文件位置
    路径:/var/log/nginx

然后退出容器终端 exit

3. nginx镜像启动容器mynginx并且挂载文件夹和文件到容器中

  • 在Docker Desktop > Settings > Shared Drives 选中文件所在磁盘,如图 :

image.png

  • 创建目录信息,结构如下
//4个文件夹
//放置nginx.conf文件,内容建议从nginx容器的终端中nginx.conf配置文件复制,这样子就保证了配置文件中的路径与镜像中配置文件的路径能保持一致
D:\docker\Nginx\data\nginx\conf  
//放置default.conf文件,内容建议从nginx容器的终端中default.conf配置文件复制,这样子就保证了配置文件中的路径与镜像中配置文件的路径能保持一致
D:\docker\Nginx\data\nginx\conf.d
//首页页面
D:\docker\Nginx\data\nginx\html
//日志信息
D:\docker\Nginx\data\nginx\logs
  • html目录下新建index.html
<html>
	<head>
		<title>Mynginx</title>
	</head>
	<body>
		<h1>恭喜Docker搭建nginx成功,欢迎使用!</h1>
	</body>
</html>

这里可能会存在编码问题导致页面乱码,在default.conf > server添加 charset ‘utf-8’ 可解决

image.png

4. 使用 nginx 镜像

docker run -d -p 80:80 --name nginx-web 
-v D:\docker\Nginx\data\nginx\html:/usr/share/nginx/html 
-v D:\docker\Nginx\data\nginx\conf/nginx.conf:/etc/nginx/nginx.conf 
-v /root/nginx/logs:/var/log/nginx 
-v D:\docker\Nginx\data\nginx\conf.d: /etc/nginx/conf.d nginx  

命令说明:

  • -p 80:80:将容器的80端口映射到主机的80端口(因此配置容器的nginx的监听端口时,一定要配置为80端口)
  • –name nginx-web:将容器命名为nginx-web
  • -v D:\docker\Nginx\data\nginx\html:/usr/share/nginx/html :将主机中当前目录下的html挂载到容器的html
  • -v D:\docker\Nginx\data\nginx\conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
  • -v /root/nginx/logs:/var/log/nginx:将主机中当前目录下的logs挂载到容器的/nginx
  • -v D:\docker\Nginx\data\nginx\conf.d: /etc/nginx/conf.d:将主机中当前目录下的conf.d挂载到容器的/etc/nginx/conf.d

5. http://localhost:80 打开网页看看效果

image.png

6. 实现反向代理163网站

在conf.d下新建to163.conf文件,内容如下:

upstream uicps  {
     server www.163.com;
}
server {
    listen 80;
    server_name  localhost;
    root   html;
    index  index.html index.htm index.php;
    location / {
        proxy_pass  http://uicps;
 
        proxy_redirect     off;
        proxy_set_header   Host     www.163.com;  #           $host;不能使用$host变量
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
   }
    #      $host 和 $http_host 都是你访问 nginx 的时候的 host ,并不是你反代的那个 host 
}

打开浏览器输入server_name访问

image.png

7. 代理个人发布服务器的项目

在conf.d下新建server.person.conf文件

server {
    listen  80;
    server_name  www.if404.com;
    access_log /var/log/nginx/if404.access.log main;
    error_log /var/log/nginx/if404.error.log error;
    location / {
        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_pass  http://宿主机IP:8080;
    }
}

重启nginx,访问server_name即可。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值