ubuntu+docker搭建nginx反向代理

nginx在我們的工作中是常用的反向代理服務,今天叫大家在ubuntu上使用docker鏡像搭建nginx反向代理。
本文是基于一個服務來實現的,notifyserver是我自己寫的一個郵件通知服務,基本架構如下:


圖片.png

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。