nginx在我們的工作中是常用的反向代理服務,今天叫大家在ubuntu上使用docker鏡像搭建nginx反向代理。
本文是基于一個服務來實現的,notifyserver是我自己寫的一個郵件通知服務,基本架構如下:
API GW是基于go-micro搭建的api網關,(如何搭建請移步:http://www.lxweimin.com/p/13d1df6e6731)
etcd是服務發現,(如何搭建請移步:http://www.lxweimin.com/p/ec0e4911236d)
notifyserver實現的主要功能是發送郵件驗證碼(4位隨機碼),以及驗證。
驗證碼過期通過redis控制,設置5分鐘過期時間。
代碼這里不展示了,自己寫個server就OK了
下面開始搭建nginx
拉取nginx鏡像
docker pull nginx:latest
nginx配置
鏡像拉取完成后,我們下面編寫nginx配置。
原始配置是這樣的
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;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
創建 nginx.conf文件,添加如下配置,可按自己的需求修改。
我們需要在此配置中加入自己server的配置,修改得地方如下,在倒數第二行的位置:
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;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#這里是新增的配置
upstream tutor{
server 192.168.109.132:8080;
}
server {
listen 80; #監聽端口
server_name www.tutor.com;
location /{
proxy_pass http://tutor;
}
}
include /etc/nginx/conf.d/*.conf;
}
這里我們加入了upstream,設置名稱為tutor,
注意:這里的名稱需要與下文proxy_pass保持一致,否則無法訪問到
有關upstream的解釋可以看這個帖子:http://tengine.taobao.org/book/chapter_5.html
upstream 是完成構造請求和解析響應的功能,我們設置upstream 的server 為192.168.109.132:8080,這個是我API GW的地址和端口,如果不用API GW,可以設置成你自己server的地址和端口。
下面這段是完成訪問的導航,
監聽端口我們設置為80,
server_name是 我們訪問該server 的域名,
location 是用來匹配我們訪問的server url
所以,這個配置,就把www.tutor.com 指向了192.168.109.132:8080這個地址
server {
listen 80; #監聽端口
server_name www.tutor.com;
location /{
proxy_pass http://tutor;
}
如果你要用負載均衡功能,可以在upstream添加其他的地址,也可以根據情況設置權重,nginx的負載均衡支持輪詢,加權,ip hash 以及擴展策略。
啟動nginx
上述的配置,按照自己的設置,配置好以后,保存在ubuntu的文件夾,我的保存在/home/kay/nginx/nginx.conf,用下面的指令啟動nginx,(2622e6cca7eb是我的nginx鏡像,你需要換成你自己的,使用docker images
即可查看鏡像的ID)
docker run --name nginx -d -p 80:80 -v /home/kay/nginx/nginx.conf:/etc/nginx/nginx.conf 2622e6cca7eb
/etc/nginx/nginx.conf 是nginx鏡像內的配置,我們直接用剛剛自己的配置覆蓋原配置即可。
到此nginx就配置完成了,
還有一步,就是在自己電腦的host 中添加如下設置
192.168.109.132 www.tutor.com
這樣通過www.tutor.com加上你的server url就可以,訪問到自己的sever了。是我自己的虛擬機ip,你需要改成自己的機器的ip