說明:本文所提的服務只是做者日常測試使用,可能含有未知bug或不成熟的解決方案,僅供參考,請不要用於正式環境,固然,使用過程當中有任何問題歡迎提給我,我能夠不斷改進html
GitHub地址: https://github.com/wll-zhou/nginx_proxy_docker nginx
nginx不單單是一個高性能的web服務器軟件,還能夠用來作正向代理和反向代理,可是nginx不支持https的正向代理,做者搜索已有的解決方案,並把最終服務集成到Docker,後續直接經過docker run就能使用了git
首先說下nginx實現https正向代理,這個用的是別人開發好的ngx_http_proxy_connect_module模塊,詳細資料能夠參考這篇文章,本文的重點是記錄怎麼集成到Docker裏面github
首先準備好工做目錄web
mkdir -p nginx/workdir && cd nginx/workdir
下載指定的nginx版本,對應的ngx_http_proxy_connect_module模塊docker
wget http://nginx.org/download/nginx-1.17.4.tar.gz git clone https://github.com/chobits/ngx_http_proxy_connect_module.git nginx_proxy
返回上一層nginx目錄,開始編寫Dockerfilecentos
# 基礎鏡像,這個用的centos7比較大,通常使用alpine FROM centos:7 # 安裝基礎依賴工具 RUN yum install -y patch gcc glibc-devel make openssl-devel pcre-devel zlib-devel gd-devel geoip-devel perl-devel #添加nginx用戶組和用戶,用來啓動nginx的用戶,看本身狀況,也有用www啓動的 RUN groupadd -g 101 nginx \ && adduser -u 101 -d /var/cache/nginx -s /sbin/nologin -g nginx nginx #拷貝當前workdir目錄到鏡像中的/workdir COPY ./workdir /workdir #切換當前目錄爲/workdir WORKDIR /workdir #安裝nginx服務(把對應的ngx_http_proxy_connect_module加入) #安裝完了以後把對應目錄軟件包刪掉 RUN tar -zxvf nginx-1.17.4.tar.gz && cd nginx-1.17.4 \ && patch -p1 < /workdir/nginx_proxy/patch/proxy_connect_rewrite_101504.patch \ && ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.17.1/debian/debuild-base/nginx-1.17.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' --add-module=/workdir/nginx_proxy \ && make && make install \ && cd /workdir && rm -rf /workdir/* #啓動nginx服務,注意要加後面的-g daemon off,表示關閉守護進程模式 CMD ["nginx", "-g", "daemon off;"]
以上就是Dockerfile的所有內容,當前工做目錄結構服務器
.網絡
├── Dockerfiledom
└── workdir
├── nginx-1.17.4.tar.gz
└── nginx_proxy
下面開始build鏡像,-t表示取的鏡像名字,後面那個.不能漏了,表示當前目錄,整個過程須要必定時間,視機器的網絡狀況
docker build -t nginx:proxy_1.17.4 .
build成功標識:
Successfully built 5e54788aa240
Successfully tagged nginx:proxy_1.17.4
若是失敗的話會有對應提示,按照提示解決便可。
如今image生成了,docker image ls看看是否是已經有nginx:proxy_1.17.4了
接下來能夠運行了,固然要準備好對應nginx配置文見,把代理的配置加上
server { listen 8888; access_log /var/log/nginx/proxy.log; # dns resolver used by forward proxying resolver 8.8.8.8; # forward proxy for CONNECT request proxy_connect; proxy_connect_allow 443 563; proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; # forward proxy for non-CONNECT request location / { proxy_pass http://$host; proxy_set_header Host $host; } }
運行鏡像(對應路徑和端口能夠本身設定)
docker run -d -p 8888:8888 -v /home/www/image/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:proxy_1.17.4
啓動以後測試下代理是否可用
curl https://www.geek-share.com -v -x 127.0.0.1:8888
至此,集成到docker完畢,後續換一個機器,直接把鏡像拷貝一下,而後docker run就能夠了,方便不少
以上服務已經發布到GitHub,clone下來後能夠直接運行,固然,本身的機器要已經安裝docker
https://github.com/wll-zhou/nginx_proxy_docker
歡迎指正問題!