Contents

Nginx - 反向代理的代名詞

Nginx 為全世界 Web 伺服器龍頭寶座,除了網頁伺服器之外,另外可以實現反向代理、負載平衡器和HTTP 快取各功能,並且輕量快速為著名。

1. Nginx 簡介

Nginx 的發音是 ( Engine X ),是非同步框架的 Web 伺服器,由戰鬥民族俄羅斯 “伊戈爾·賽索耶夫” 開發並開源貢獻, 除了有媲美老牌 Apache Httpd 之外的 Web 伺服器功能 ( 效率更快且消耗更低資源 ) ,大部分使用於負載平衡功能 ( 硬體的 F5 非常的昂貴,使用軟體的 Nginx 一點也不輸給硬體的 F5 的效能 )。

Nginx 比 Apache 最有效率的方式是因為預設使用非同步執行 ( 避免請求卡住的資源開銷 ),及相對簡單的配置方式,使得使用者大幅上升,也將傳統的 LAMP ( Linux 、 Apache、 MySQL、 PHP )變成 LNMP ( Linux、 Nginx、 MySQL、 PHP )架構。

2. 什麼是反向代理 ?

https://i.imgur.com/q8yPOmj.png
From umbrella.cisco.com

反向代理( Reverse Proxy ) 與 正向代理 ( Forward Proxy ) 兩者差異:

  1. 正向代理 : 使用者發送至伺服器 (唯一)請求前,透過代理伺服器代為發送,可以有效隱藏使用者電腦訊息,再由代理伺服器回傳回應給使用者。
  2. 反向代理 : 伺服器有多部機器,使用者發送請求給代理伺服器,由代理伺服器去轉送,並回傳給使用者,可以有效平衡使用者請求流量

EX. 舉個實際的例子:

  1. 正向代理 : 想喝杯小7飲料,找小弟去巷子門口的小7買飲料回來,這就是正向代理。
  2. 反向代理 : 想喝杯小7飲料,找小弟去任一家小7買飲料回來,小弟會選擇最少人的地方或是覺得最近的地方購買,這就是反向代理。

3. Nginx 安裝方式

Nginx 有二種安裝方式:

  1. 下載原始碼,自行編譯 ( 比較麻煩 )
  2. 用官方已經編譯好各平台的安裝包,進行安裝

3.1 以 RHEL 8 系列安裝為例 :

RHEL 8 系列包含 ( Redhat、 CentOS、 Oracle Linux 、 Rocky Linux 等)

  1. 進入 Nginx 官網, 官網連結請點我

  2. 選擇 Nginx 穩定版倉庫地址

1
2
3
4
5
6
7
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  1. 創建新的倉庫清單 /etc/yum.repos.d/nginx.repo , 並將 Nginx 貼上穩定版倉庫地址
1
2
3
4
5
6
7
8
9
cat  >> /etc/yum.repos.d/nginx.repo  << EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
  1. 安裝 nginx 套件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[root@servera ~]# yum install nginx
nginx stable repo                                                                                                                                                                  25 kB/s |  36 kB     00:01    
Dependencies resolved.
==================================================================================================================================================================================================================
 Package                                      Architecture                                  Version                                                     Repository                                           Size
==================================================================================================================================================================================================================
Installing:
 nginx                                        x86_64                                        1:1.20.2-1.el8.ngx                                          nginx-stable                                        820 k

...
  1. 上啟動 Nginx 並且託管由 systemd 開機自動拉起
1
systemctl enable nginx --now
  1. 檢查服務是否可以存取
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@servera ~]# curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

3.2 以 Ubuntu 安裝為例 :

  1. 安裝所需套件
1
2
apt update
apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
  1. 匯入 gpgkey
1
2
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    |  tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
  1. 加入 Nginx 倉庫清單
1
2
3
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | tee /etc/apt/sources.list.d/nginx.list
  1. 安裝 Nginx 套件
1
2
sudo apt update
sudo apt install nginx
  1. 上啟動 Nginx 並且託管由 systemd 開機自動拉起
1
systemctl enable nginx --now
  1. 檢查服務是否可以存取
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@servera ~]# curl 127.0.0.1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

4. 小結

Nginx 是個十分強大且好用的工具,熟悉其使用與掌握很重要。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!