nginx在我們的工作中是常用的反向代理服務(wù),今天叫大家在ubuntu上使用docker鏡像搭建nginx反向代理。
本文是基于一個(gè)服務(wù)來(lái)實(shí)現(xiàn)的,notifyserver是我自己寫的一個(gè)郵件通知服務(wù),基本架構(gòu)如下:

API GW是基于go-micro搭建的api網(wǎng)關(guān),(如何搭建請(qǐng)移步:http://www.itdecent.cn/p/13d1df6e6731)
etcd是服務(wù)發(fā)現(xiàn),(如何搭建請(qǐng)移步:http://www.itdecent.cn/p/ec0e4911236d)
notifyserver實(shí)現(xiàn)的主要功能是發(fā)送郵件驗(yàn)證碼(4位隨機(jī)碼),以及驗(yàn)證。
驗(yàn)證碼過(guò)期通過(guò)redis控制,設(shè)置5分鐘過(guò)期時(shí)間。
代碼這里不展示了,自己寫個(gè)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;
}
創(chuàng)建 nginx.conf文件,添加如下配置,可按自己的需求修改。
我們需要在此配置中加入自己server的配置,修改得地方如下,在倒數(shù)第二行的位置:
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; #監(jiān)聽端口
server_name www.tutor.com;
location /{
proxy_pass http://tutor;
}
}
include /etc/nginx/conf.d/*.conf;
}
這里我們加入了upstream,設(shè)置名稱為tutor,
注意:這里的名稱需要與下文proxy_pass保持一致,否則無(wú)法訪問到
有關(guān)upstream的解釋可以看這個(gè)帖子:http://tengine.taobao.org/book/chapter_5.html
upstream 是完成構(gòu)造請(qǐng)求和解析響應(yīng)的功能,我們?cè)O(shè)置upstream 的server 為192.168.109.132:8080,這個(gè)是我API GW的地址和端口,如果不用API GW,可以設(shè)置成你自己server的地址和端口。
下面這段是完成訪問的導(dǎo)航,
監(jiān)聽端口我們?cè)O(shè)置為80,
server_name是 我們?cè)L問該server 的域名,
location 是用來(lái)匹配我們?cè)L問的server url
所以,這個(gè)配置,就把www.tutor.com 指向了192.168.109.132:8080這個(gè)地址
server {
listen 80; #監(jiān)聽端口
server_name www.tutor.com;
location /{
proxy_pass http://tutor;
}
如果你要用負(fù)載均衡功能,可以在upstream添加其他的地址,也可以根據(jù)情況設(shè)置權(quán)重,nginx的負(fù)載均衡支持輪詢,加權(quán),ip hash 以及擴(kuò)展策略。
啟動(dòng)nginx
上述的配置,按照自己的設(shè)置,配置好以后,保存在ubuntu的文件夾,我的保存在/home/kay/nginx/nginx.conf,用下面的指令啟動(dòng)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鏡像內(nèi)的配置,我們直接用剛剛自己的配置覆蓋原配置即可。
到此nginx就配置完成了,
還有一步,就是在自己電腦的host 中添加如下設(shè)置
192.168.109.132 www.tutor.com
這樣通過(guò)www.tutor.com加上你的server url就可以,訪問到自己的sever了。是我自己的虛擬機(jī)ip,你需要改成自己的機(jī)器的ip