使用Docker配置反向代理

经常我们会需要将本地机器上起的其他http服务放到公网上,这就需要将特定的域名的访问转到这个docker容器内,并且往往还需要添加https,有时候还希望有个用户名和密码的认证,以防其他人访问。本文讲述如何使用Nginx反向代理将本机跑在其他容器里的http服务,转为https,并且添加用户名和密码认证。

目录配置

我的目录配置如下

nginx-proxy/ ├── create.sh ├── nginx.conf ├── passwd │ └── test └── ssl └── test.sysu.tech ├── key └── pem

启动脚本

create.sh如下

#!/bin/bash docker rm -f nginx_proxy docker run -d \ -v /ssd-raid/nginx-proxy/nginx.conf:/etc/nginx/nginx.conf \ -v /ssd-raid/nginx-proxy/ssl:/root/ssl \ -v /ssd-raid/nginx-proxy/passwd:/passwd \ --name=nginx_proxy \ -p 80:80 \ -p 443:443 \ --restart=unless-stopped \ nginx

Nginx配置文件

nginx.conf如下

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; # For HEXO server { listen 80; server_name blog.sysu.tech; #charset koi8-r; access_log /root/host.access.log main; location / { proxy_pass http://192.168.1.2:8081; } } # For test server { listen 443 ssl; server_name test.sysu.tech; ssl_certificate /root/ssl/test.sysu.tech/pem; ssl_certificate_key /root/ssl/test.sysu.tech/key; # password auth_basic "Please input password"; auth_basic_user_file /passwd/test; #charset koi8-r; access_log /root/host.access.log main; location / { proxy_pass http://192.168.1.2:12345; } } }

配置反向代理

配置反向代理的关键就是在nginx.conf中的如下配置

server_name blog.sysu.tech; location / { proxy_pass http://192.168.1.2:12345; }

这里的http://192.168.1.2:12345就是从本地能访问到的方式,blog.sysu.tech就是它的域名。(将域名解析到本地ip此处省略)

配置https

配置反向代理的关键就是在nginx.conf中的如下配置

listen 443 ssl; server_name test.sysu.tech; ssl_certificate /root/ssl/test.sysu.tech/pem; ssl_certificate_key /root/ssl/test.sysu.tech/key;

这里的pemkey就是你配置域名的ssl证书得来的,我是直接阿里云上申请的,能直接生成Nginx能用的证书

配置访问密码

配置反向代理的关键就是在nginx.conf中的如下配置

auth_basic "Please input password"; auth_basic_user_file /passwd/test;

其中/passwd/test中的就是用户名和密码,需要用htpasswd命令生成,例如

htpasswd -bc /ssd-raid/nginx-proxy/passwd/test test 123456

配置流量统计

其他所有配置都不需要改,只需要在nginx.conf增加,就可以在对应的页面访问到了

http { vhost_traffic_status_zone; ... server { ... # 只需要某一个Server添加即可 location /status { vhost_traffic_status_display; vhost_traffic_status_display_format html; } } }

原文链接:http://blog.sysu.tech/Docker/%E4%BD%BF%E7%94%A8Docker%E9%85%8D%E7%BD%AE%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享