Nginx http 反向代理設(shè)置

在上一篇 Nginx 在 CentOS 上的安裝時已經(jīng)提到了 Nginx 是一個應(yīng)用廣泛的反向代理服務(wù)玻佩,可是有的人可能就一臉問號了,反向代理是啥意思?

A proxy server is a go?between or intermediary server that forwards requests for content from multiple clients to different servers across the Internet. A reverse proxy server is a type of proxy server that typically sits behind the firewall in a private network and directs client requests to the appropriate backend server. A reverse proxy provides an additional level of abstraction and control to ensure the smooth flow of network traffic between clients and servers.

Ningx 的官網(wǎng)給出了解釋逼蒙,https://www.nginx.com/resources/glossary/reverse-proxy-server/蟋定。

大致意思是說:

代理服務(wù)器是一個中間服務(wù)器往核,它主要是把英特網(wǎng)上的不同客戶端的請求轉(zhuǎn)發(fā)到不同的服務(wù)器上晾腔。而反向代理服務(wù)器則是代理服務(wù)器的一種,它也是把英特網(wǎng)上的不同客戶端的請求轉(zhuǎn)發(fā)到不同的服務(wù)器上,它這些服務(wù)器是位于某個私有網(wǎng)絡(luò)中,且該私有網(wǎng)絡(luò)具有防火墻(比如防火墻只允許該私有網(wǎng)絡(luò)通過一個指定的 IP 與 端口與外網(wǎng)連接)傀顾。也就是說我們直接訪問需要訪問的服務(wù)器是不通的椒惨,如下是 Nginx 官網(wǎng)的 Nginx 配置 API 網(wǎng)關(guān)示意圖贱鄙,但我覺得它同樣能表達反向代理的過程劝贸。

反向代理示意圖

另外,反向代理還提供了額外的抽象和控制級別(比如對傳輸數(shù)據(jù)進行壓縮等等)逗宁,以確庇尘牛客戶端和服務(wù)器之間的網(wǎng)絡(luò)流量順暢。

下面瞎颗,就介紹一些反向代理的常用的設(shè)置件甥。

一、nginx.conf 配置


1.1 用戶配置

如果 nginx 使用 root 用戶運行哼拔,那么最好將 nginx.conf 中的 user 配置為 root (默認為 nobody)引有。不然,如果轉(zhuǎn)發(fā)為目錄時倦逐,如果目錄權(quán)限不是 777譬正,那么將訪問不到轉(zhuǎn)發(fā)的目錄而報 403 錯誤。

user root;
用戶設(shè)置

1.2 引入自定義配置

正常來說檬姥,我們可以在 nginx.conf 配置許多個轉(zhuǎn)發(fā)規(guī)則曾我,反向解析到不同的服務(wù),比如 api.jiangzhuolin.com 我需要解析到我的 api 服務(wù)健民,mail.jiangzhuolin.com 轉(zhuǎn)發(fā)到我的郵箱服務(wù)抒巢,file.jiangzhuolin.com 轉(zhuǎn)發(fā)到我的服務(wù)器上的某個文件目錄。但是如果全都配置到一個文件里秉犹,那么會很亂很難維護蛉谜。

因此,我們可以把每一個轉(zhuǎn)發(fā)規(guī)則分離出去凤优,便于維護悦陋。

root 用戶執(zhí)行如下命令編輯 nginx.conf:

[root@lab1 sbin]# vim ${NGINX_HOME}/conf/nginx.conf

注:${NGINX_HOME} 表示你的 nginx 的安裝路徑,比如:nginx 安裝在 /usr/local/nginx

在文件中添加如下內(nèi)容筑辨,并保存退出:

include vhost/*.conf;

如下所示:

虛擬主機配置文件引入

注:
(1) nginx.conf 所在的位置與 nginx 的安裝位置有關(guān)。比如幸逆,我的 nginx 安裝在 /usr/local/nginx 下棍辕, nginx.conf 就應(yīng)該在 /usr/local/nginx/conf/nginx.conf,如果你的 nginx 安裝在 /usr/nginx 下还绘,那么你的 nginx.conf 就在 /usr/nginx/conf/nginx.conf

(2) include vhost/*.conf 表示引入 vhost 目錄下的所有 .conf 結(jié)尾的文件內(nèi)容

1.3 創(chuàng)建一個自定義配置文件目錄

在 ${NGINX_HOME}/conf 目錄下新建 vhost 目錄:

[root@lab1 conf]# pwd

/usr/local/nginx/conf

[root@lab1 conf]# mkdir vhost

注:vhost 目錄名稱可以為其他楚昭,只需要引入對應(yīng)名稱的目錄下的所有配置文件即可。

二拍顷、端口轉(zhuǎn)發(fā)

端口轉(zhuǎn)發(fā)就是將一個域名轉(zhuǎn)發(fā)到監(jiān)聽某個端口進程服務(wù)上抚太。

示例:

在 vhost 目錄下創(chuàng)建 demo.jzl.com.conf :

[root@lab1 vhost]# vi demo.jzl.com.conf

內(nèi)容如下:

server

{
    listen 80;
    server_name demo.jzl.com;
    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://192.168.56.130:8081/web-demo/;
    }
    access_log logs/demo.jzl.com_access.log;
}

注:

(a) server {} 表示的是 nginx 的配置,其中 listen 80 表示 nginx 的監(jiān)聽端口為 80, server_name demo.jzl.com 表示該主機解析的域名

(b) location / {} 表示的是轉(zhuǎn)發(fā)規(guī)則尿贫,proxy_pass http://192.168.56.130:8081/web-demo/ 表示當使用 demo.jzl.com 訪問時电媳,轉(zhuǎn)發(fā)到 192.168.56.130 的 8081 端口下的 web-demo 目錄

(c) 當然,你的 192.168.56.130 必須要有程序運行監(jiān)聽在 8081 端口~庆亡,我的 192.168.56.130 上運行了一個 tomcat 監(jiān)聽端口 8081匾乓,tomcat 的 webapps 下部署了一個 context 為 web-demo 程序

(d) 如果你不想設(shè)置域名,當然也可以設(shè)置 ip 又谋,比如把 demo.jzl.com 換成 192.168.56.130 拼缝,那么當訪問 http://192.168.56.130:80 ,會被 nginx 轉(zhuǎn)發(fā)到 192.168.56.130:8081/web-demo/

三彰亥、虛擬域名

如果你的主機沒有由 DNS 解析的域名咧七,那么可以設(shè)置虛擬域名來訪問,所謂虛擬域名任斋,就是在我們的 hosts 文件中配置的域名继阻,它只在我們配置的計算機上生效。設(shè)置方法如下:

3.1 配置虛擬域名

在你的被訪問的 server 上 ( nginx server) 設(shè)置本機域名解析仁卷,vi /etc/hosts 穴翩,添加內(nèi)容如下示例:

192.168.56.130 demo.jzl.com

示例:

配置虛擬域名

3.2 配置訪問客戶端的虛擬域名

在你需要訪問遠程 server 的客戶機上也設(shè)置一個虛擬域名解析(注意,客戶機必須與遠程 server 網(wǎng)絡(luò)連通)锦积,此處以本地的 windows 客戶機為例:

打開并編輯下方文件:

C:\Windows\System32\drivers\etc\host

添加內(nèi)容如下芒帕,并保存 (注:直接用 windows 的編輯打開文件可能會沒有權(quán)限保存,可以將文件復制出來更改后再覆蓋原文件丰介;也可以使用 notepadd ++ 來編輯文件可以保存):

192.168.56.130 demo.jzl.com

示例如下圖:

客戶機虛擬域名配置

驗證:

添加上面的 nginx 配置規(guī)則后背蟆,需要重啟 nginx。(當然哮幢,如果你之前沒啟動 nginx带膀,不用重啟,直接啟動即可)

${NGINX_HOME}/sbin/nginx    # 啟動 ngnix

${NGINX_HOME}/sbin/nginx -s reload    # 重載 nginx

注:${NGINX_HOME} 代表你 nginx 的安裝目錄橙垢,如果你配置了 nginx 的全局環(huán)境變量 (參考上一篇 Nginx 安裝)垛叨,也可以在任意目錄位置直接執(zhí)行 nginx/nginx -s reload

查看 nginx 的監(jiān)聽端口以及運行進程號:

[root@lab1 pentaho-server]# netstat -apn|grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      8917/nginx          
unix  3      [ ]         STREAM     CONNECTED     29047  8917/nginx          
unix  3      [ ]         STREAM     CONNECTED     29046  8917/nginx

查看 8080 端口的監(jiān)聽及運行情況:

[root@lab1 conf]# netstat -apn|grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      1580/java

瀏覽器中訪問:

通過虛擬域名訪問
通過 IP 端口訪問

可以看到已經(jīng)配置成功。

四柜某、目錄轉(zhuǎn)發(fā)

示例:

在 vhost 目錄下創(chuàng)建 file.jzl.com.conf :

[root@lab1 vhost]# vi file.jzl.com.conf

內(nèi)容如下示例:

server {
    default_type 'text/html';
    charset utf-8;

    listen 80; #端口
    autoindex on;
    server_name file.jzl.com; #域名
    access_log /usr/local/nginx/logs/file.jzl.com_access.log combined;
    index index.html index.htm index.jsp index.php;

     # 轉(zhuǎn)發(fā)規(guī)則[目錄轉(zhuǎn)發(fā)]
    location / {
        root /opt;
        add_header Access-Control-Allow-Origin *;
    }

   location /elk {
        alias /data/elk/;
        add_header Access-Control-Allow-Origin *;
    }
}

注:

(a) autoindex on; 此設(shè)置必須加上嗽元,表示讓nginx 自動為目錄添加索引。如果不加上喂击,當在瀏覽器中訪問時剂癌,會出現(xiàn)403錯誤

403 錯誤

(b) root /opt 代表的是定義一個基準目錄,也就是說當我們訪問 file.jzl.com 域名下的 / (file.jzl.com/) 時翰绊,會自動轉(zhuǎn)發(fā)到 /opt/ 目錄下佩谷。

(c) alias /data/elk/ 表示的是當我們訪問 file.jzl.com 下的 elk (file.jzl.com/elk/) 時旁壮,會自動轉(zhuǎn)發(fā)到 /data/elk/ 目錄。另谐檀,如果是設(shè)置 alias抡谐, 目錄最后的 / 不可少,即不能寫成 /data/elk

(d) 配置目錄轉(zhuǎn)發(fā)時稚补,alias 與 root 兩種方式任選一種即可童叠,但需要注意兩種方式使用上的不同。

(e) 配置 server 與 client 的 hosts 文件如下:

服務(wù)器 file.jzl.com 配置
客戶機 file.jzl.com 配置

瀏覽器中輸入域名訪問如下:

訪問目錄
訪問目錄
訪問目錄

注:如果你已經(jīng)有 DNS 解析的域名课幕,則完全不用配置 hosts 文件中的本地域名解析了厦坛,直接在反向代理中配置具體域名即可。

附錄一乍惊、nginx 反向代理


官方反向代理配置介紹地址:

https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

附錄二杜秸、nginx laction 配置


官方 location 介紹地址如下:

http://nginx.org/en/docs/http/ngx_http_core_module.html?#location

附錄三、復雜 location 配置示例


server {
listen 80;
autoindex on;
server_name example.jzl.com);

access_log /usr/local/nginx/logs/access.log combined;
index index.html index.htm index.jsp index.php;

if ( $query_string ~* ".*[\;'\<\>].*" ){
        return 404;
        }

location = / {
        root /product/front/mmall_fe/dist/view;
        index index.html;
}

location ~ .*\.html$ {
        root /product/front/mmall_fe/dist/view;
        index index.html;
}

location / {
        proxy_pass [http://127.0.0.1:8080/;](http://127.0.0.1:8080/;)
        }

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
        proxy_pass [http://127.0.0.1:8080](http://127.0.0.1:8080/);
        expires 30d;
        }

location ~ .*\.(js|css)?$ {
        proxy_pass [http://127.0.0.1:8080](http://127.0.0.1:8080/);
        expires 7d;
        }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末润绎,一起剝皮案震驚了整個濱河市撬碟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌莉撇,老刑警劉巖呢蛤,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異棍郎,居然都是意外死亡其障,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門涂佃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來励翼,“玉大人,你說我怎么就攤上這事辜荠∑В” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵伯病,是天一觀的道長造烁。 經(jīng)常有香客問我,道長午笛,這世上最難降的妖魔是什么膨蛮? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮季研,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誉察。我一直安慰自己与涡,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驼卖,像睡著了一般氨肌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酌畜,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天怎囚,我揣著相機與錄音,去河邊找鬼桥胞。 笑死恳守,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的贩虾。 我是一名探鬼主播催烘,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缎罢!你這毒婦竟也來了伊群?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤策精,失蹤者是張志新(化名)和其女友劉穎舰始,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咽袜,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡丸卷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了酬蹋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片及老。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖范抓,靈堂內(nèi)的尸體忽然破棺而出骄恶,到底是詐尸還是另有隱情,我是刑警寧澤匕垫,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布僧鲁,位于F島的核電站,受9級特大地震影響象泵,放射性物質(zhì)發(fā)生泄漏寞秃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一偶惠、第九天 我趴在偏房一處隱蔽的房頂上張望春寿。 院中可真熱鬧,春花似錦忽孽、人聲如沸绑改。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厘线。三九已至识腿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間造壮,已是汗流浹背渡讼。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耳璧,地道東北人成箫。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像楞抡,于是被迫代替她去往敵國和親伟众。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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