Nginx
正向代理和反向代理
當用戶端無法通路外部資源的時候,需要通過代理的方式間接的去通路。代理分為正向代理和反向代理,反向代理除了上述作用外,還能保證内網的安全,實作虛拟主機以及起到負載均衡的作用。
- 正向代理:用戶端向代理發送請求并指定目标資源,代理接收到請求後向源伺服器轉發請求并将接收到的響應再發送給用戶端。正向代理需要在用戶端配置需要代理的伺服器的ip。
- 反向代理:用戶端發起請求後,(用戶端并不知道自己請求的哪台伺服器),代理接收到請求并轉發給内網伺服器,再将響應發送給用戶端。
- 差別:正向代理用戶端(與用戶端同屬于一個LAN),反向代理伺服器(與伺服器同屬于一個LAN)。
Nginx反向代理
- 配置:
server {
listen 80;
location / {
proxy_pass http://192.168.0.112:8080; # 應用伺服器HTTP位址
}
}
- 負載均衡:當網站使用者量很大時,使用者請求也很龐大,如果直接請求一台伺服器将會給這台伺服器造成極大的壓力,使用者體驗也會随之變差。是以可以使用反向代理将使用者請求配置設定給多台伺服器處理,這樣還有一個好處是如果一台代理伺服器無法正常工作時,還有其他伺服器正常運作,這樣就不會影響使用者正常使用。
upstream myweb {
server 192.168.0.111:8080; # 應用伺服器1
server 192.168.0.112:8080; # 應用伺服器2
}
server {
listen 80;
location / {
proxy_pass http://myweb;
}
}
- 虛拟主機:與負載均衡相反,并不是所有網站使用者量都很大,這樣的話可以将多個網站部署在同一個伺服器上以節約資源。但是使用者可以通過不同域名通路完全不同的網站,并互相不受影響。這就是Nginx建立的虛拟主機。
server {
listen 80 default_server;
server_name _;
return 444; # 過濾其他域名的請求,傳回444狀态碼
}
server {
listen 80;
server_name www.aaa.com; # www.aaa.com域名
location / {
proxy_pass http://localhost:8080; # 對應端口号8080
}
}
server {
listen 80;
server_name www.bbb.com; # www.bbb.com域名
location / {
proxy_pass http://localhost:8081; # 對應端口号8081
}
端口号8080和8081分别代表兩個不同的應用,并通過server_name來指定通路該應用時的域名。這樣還能起到過濾惡意将域名指向你的伺服器的行為。
-
FASTCGI:Nginx本身不支援PHP等語言,但是它可以通過FastCGI來将請求扔給某些語言或架構處理(例如PHP、Python、Perl)。
(ps:對于FASTCGI,會在後續的文章中繼續講解)