Nignx 配置反向代理

解決問題:使用nignx完成http轉(zhuǎn)https和二級域名轉(zhuǎn)發(fā)浅萧,將已有http通信的web前端轉(zhuǎn)為https,包括主域和一個二級域名阶淘,這兩個domain解析到同一ip哈踱。
Nginx作用:
(1)HTTP靜態(tài)服務(wù)器:存儲圖片箩退,文件等靜態(tài)資源
(2)負載均衡:當一臺web服務(wù)器不夠用時丑罪,需要添置一臺web服務(wù)器传黄,這時候就需要nginx來 做負載均衡杰扫,把瀏覽器的訪問量以特定的規(guī)則分發(fā)到兩臺web服務(wù)器上。
(3)反向代理:正常情況下客戶端直接訪問服務(wù)器膘掰。反向代理是客戶端請求nginx章姓,nginx請求服務(wù)器,然后返回數(shù)據(jù)給客戶端识埋。
(4)虛擬主機:例如將www.aaa.comwww.bbb.com兩個網(wǎng)站部署在同一臺服務(wù)器上凡伊,兩個域名解析到同一個IP地址,但是用戶通過兩個域名卻可以打開兩個完全不同的網(wǎng)站窒舟,互相不影響系忙,就像訪問兩個服務(wù)器一樣,所以叫兩個虛擬主機惠豺。個域名解析同一個IP地址银还。用nginx做反向代理將對不同域名的請求分別轉(zhuǎn)發(fā)到該IP的不同端口风宁。

解決上面的問題,用到nginx反向代理蛹疯,虛擬主機

Nginx安裝:選擇使用docker,一鍵部署戒财。具體可參考博客:http://www.ruanyifeng.com/blog/2018/02/nginx-docker.html。在此使用nginx做反向代理而不是web服務(wù)器捺弦,所以只需要修改nginx配置饮寞,將配置文件映射到本地,不需要映射網(wǎng)頁html文件列吼。
Nginx配置:
實現(xiàn)功能:

以上可以實現(xiàn)的前提是DNS可以自動將domain解析到配置nginx的服務(wù)器ip上。

配置文件:

upstream upstream1 {  
    server 10.8.5.5:8888;  
    }   #upstream 實現(xiàn)負載均衡凑耻,可在此配置多個服務(wù)器
#------------http 重定向到https上----------------------
server {
    listen       80;
    server_name  aa.com;  #主域名
    return      301 https://$server_name; 重定向太示,瀏覽器向重定向后的地址重新請求
}

server {
    listen       80;
    server_name  bb.aa.com; #二級域名
    return      301 https://$server_name; 
}
#------------------------https設(shè)置反向代理-----------------------
server {
    listen 443 ssl http2;
    server_name  aa.com;  #主域名
    
   ssl                      on;
   ssl_certificate          /etc/nginx/certs/example.crt;   #證書位置
   ssl_certificate_key      /etc/nginx/certs/example.key;

    ssl_session_timeout  5m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;

    location / {
        proxy_pass  http://upstream1 ;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        #proxy_buffer_size 64k;
        #proxy_buffers   32 32k;
        #proxy_busy_buffers_size 128k;

    }

}

server {
    listen 443 ssl http2;
    server_name  bb.aa.com; #二級域名
    
   ssl                      on;
   ssl_certificate          /etc/nginx/apicerts/example.crt;
   ssl_certificate_key      /etc/nginx/apicerts/example.key;

    ssl_session_timeout  5m;

    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;

    location / {

        proxy_pass  https://10.8.5.5:5020/api/;  #被代理服務(wù)器地址

        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        #proxy_buffer_size 64k;
        #proxy_buffers   32 32k;
        #proxy_busy_buffers_size 128k;

    }

    location /swaggerui/ {#二級目錄轉(zhuǎn)發(fā)
            proxy_pass https://10.8.5.5:5020/swaggerui/;  需要轉(zhuǎn)發(fā)的二級domain本身為https,
                # 該路徑下為web頁面的靜態(tài)文件css,js等香浩,不設(shè)置的話網(wǎng)頁無法正常展示          
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
         }

    location /api/ {#二級目錄轉(zhuǎn)發(fā)

            proxy_pass  https://10.8.5.5:5020/api/;

            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            #proxy_buffer_size 64k;
            #proxy_buffers   32 32k;
            #proxy_busy_buffers_size 128k;
        }

}

至此类缤,所有配置均已完成,啟動命令:

docker container run   -d  \
-p 10.8.5.5:80:80 -p 10.8.5.5:443:443 \
--rm   \
--name mynginx \
--volume "/mnt/storage/nginx_docker_demo/conf":/etc/nginx  \
nginx

-d 后臺運行
-p 容器80端口映射到10.8.5.5:80
-- rm 停止運行后刪除容器文件
-- name 自定義容器名稱
-volumn nginx配置文件映射
Bingo Bingo ~~~~
docker ps 可以查看正在運行的容器邻吭,可以發(fā)現(xiàn)已經(jīng)啟動成功餐弱。

番外:配置過程中遇到的一些其他問題:
1.ssl 證書 ,我用的是openssl申請的免費版證書囱晴,只能用于一個domain膏蚓,對二級domain無效(貌似免費的都是這樣),因此在nginx配置的時候分別配置畸写,制定各自證書驮瞧,否則可以配置到一起。配置方法如下:

server {
   listen 443 ssl http2;
    server_name  *.aa.com;  #此處設(shè)置為泛域名
    
   ssl                      on;
   ssl_certificate          /etc/nginx/certs/example.crt;  ##一定是相同的證書
   ssl_certificate_key      /etc/nginx/certs/example.key;

   ssl_session_timeout  5m;

   ssl_ciphers HIGH:!aNULL:!MD5;
   ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers   on;

   if ($http_host ~* "^(.*?)\.aa\.com$") {    
                set $domain $1;                    
       }

   location / {
    if ($domain ~* "bb") {
              proxy_pass  https://10.8.5.5:5020/api/;#匹配到子域名時設(shè)置相應(yīng)的轉(zhuǎn)發(fā)  
            }
    proxy_pass  http://upstream1;#默認情況枯芬,也就是主域名時相應(yīng)的轉(zhuǎn)發(fā)
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
  1. 配置子域名時有些特殊论笔,web頁面是flask-restplus框架中封裝的swagger UI,本來也是http通信千所,按照主域名的配置后狂魔,靜態(tài)的頁面找不到css,js文件。找到這些文件所在路徑后在nginx中添加二級目錄可以解決淫痰。


    文件路徑

    此時又出現(xiàn)了另外一個問題最楷,swagger讀某些json文件時為http,這樣就產(chǎn)生了https和http混合通信,無法正常工作。在網(wǎng)上找了些解決辦法管嬉,都不生效皂林。干脆在flask-restplus配置為https,這樣就全部是https通信了,修改的代碼在此記錄下:

###需要安裝模塊  pip install pyOpenSSL
if __name__ == '__main__':
    from werkzeug.contrib.fixers import ProxyFix
    initialize_app(app)
    app.wsgi_app = ProxyFix(app.wsgi_app) #手動修復(fù)代理
    app.run(threaded=True, host='0.0.0.0', port=5020 ,ssl_context='adhoc')#此處一定是adhoc,使用python模塊自動生成的證書
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚯撩,一起剝皮案震驚了整個濱河市础倍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胎挎,老刑警劉巖沟启,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異犹菇,居然都是意外死亡德迹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門揭芍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胳搞,“玉大人,你說我怎么就攤上這事称杨〖∫悖” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵姑原,是天一觀的道長悬而。 經(jīng)常有香客問我,道長锭汛,這世上最難降的妖魔是什么笨奠? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮唤殴,結(jié)果婚禮上般婆,老公的妹妹穿的比我還像新娘。我一直安慰自己眨八,他們只是感情好腺兴,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著廉侧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪篓足。 梳的紋絲不亂的頭發(fā)上段誊,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音栈拖,去河邊找鬼连舍。 笑死,一個胖子當著我的面吹牛涩哟,可吹牛的內(nèi)容都是我干的索赏。 我是一名探鬼主播盼玄,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼潜腻!你這毒婦竟也來了埃儿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤融涣,失蹤者是張志新(化名)和其女友劉穎童番,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體威鹿,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡剃斧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忽你。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幼东。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖科雳,靈堂內(nèi)的尸體忽然破棺而出根蟹,到底是詐尸還是另有隱情,我是刑警寧澤炸渡,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布娜亿,位于F島的核電站,受9級特大地震影響蚌堵,放射性物質(zhì)發(fā)生泄漏买决。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一吼畏、第九天 我趴在偏房一處隱蔽的房頂上張望督赤。 院中可真熱鬧,春花似錦泻蚊、人聲如沸躲舌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沪停,卻和暖如春秒旋,著一層夾襖步出監(jiān)牢的瞬間约计,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工迁筛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煤蚌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像尉桩,于是被迫代替她去往敵國和親筒占。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 清晨蜘犁,練筆 攝影是素描書上的作品翰苫,照著畫,不是很傳神沽瘦。 騎行是我非常喜歡的一部電影 大家猜猜 最好不要猜出來 因為...
    一云快樂畫畫的貓閱讀 404評論 4 4
  • 這個周末有快樂革骨,有幸運,也有痛苦析恋,但此時此刻我的內(nèi)心確實很煎熬良哲,很自責,我很后悔助隧。 周五打不到回武義的順風車筑凫,小寶...
    你的云云閱讀 326評論 0 0
  • 干什么都不能著急,最簡單的就說這個小孩兒吧并村。每天半夜回家我就不說什么了巍实,從來也不顧及別人的感受,別人睡覺的時候她的...
    不會游泳的小魚魚閱讀 208評論 0 0
  • 天開始轉(zhuǎn)涼了哩牍,至今孤獨的你是否在考慮談場戀愛來御寒呢 彷惶無助的時候棚潦,一句安慰的話就可以奪走你的芳心 朋友既然...
    暖心小屋閱讀 144評論 0 1