Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作爲一個HTTP服務器進行網站的發佈處理,另外Nginx可以作爲反向代理進行負載均衡的實現。Nginx使用基於事件驅動架構,使得其可以支持數以百萬級別的TCP連接。Nginx是一個跨平臺服務器,可以運行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系統上。
一、正向代理
正向代理,代理的是客戶端,代客戶端發出請求,是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。例如:通過在瀏覽器上設置代理服務器ip地址和端口號,訪問國外的網站,就是正向代理。正向代理最大的特點是客戶端非常明確要訪問的服務器地址,服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端,正向代理模式屏蔽或者隱藏了真實客戶端信息。客戶端必須設置正向代理服務器,所以知道代理服務器的ip和端口也是必須的。
正向代理的用途:
(1)訪問原來無法訪問的資源,如Google
(2) 可以做緩存,加速訪問資源
(3)對客戶端訪問授權,上網進行認證
(4)代理可以記錄用戶訪問記錄(上網行爲管理),對外隱藏用戶信息
二、反向代理
多個客戶端給服務器發送的請求,Nginx服務器接收到之後,按照一定的規則分發給了後端的業務處理服務器進行處理。此時的請求來源也就是客戶端是明確的,但是請求具體由哪臺服務器處理的並不明確了,Nginx扮演的就是一個反向代理角色。
客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。因爲客戶端不需要任何配置就可以訪問。
反向代理,代理的是服務端,代服務端接收請求,主要用於服務器集羣分佈式部署的情況下,反向代理隱藏了服務器的信息。
反向代理的作用:
(1)保證內網的安全,通常將反向代理作爲公網訪問地址,Web服務器是內網
(2)負載均衡,通過反向代理服務器來優化網站的負載
正向代理和反向代理可以存在一起:
三、負載均衡
客戶端發送的,Nginx反向代理服務器接收到的請求數量,即是所說的負載量。
請求數量按照一定的規則進行分發到不同的服務器處理的規則,就是一種均衡規則。
將服務器接收到的請求按照規則分發的過程,則稱爲負載均衡。
Nginx支持的負載均衡調度算法方式如下:
- weight輪詢(默認,常用):接收到的請求按照權重分配到不同的後端服務器,即使在使用過程中,某一臺後端服務器宕機,Nginx會自動將該服務器剔除出隊列,請求受理情況不會受到任何影響。 這種方式下,可以給不同的後端服務器設置一個權重值(weight),用於調整不同的服務器上請求的分配率;權重數據越大,被分配到請求的機率越大;該權重值,主要是針對實際工作環境中不同的後端服務器硬件配置進行調整的。
- ip_hash(常用):每個請求按照發起客戶端的ip的hash結果進行匹配,這樣的算法下一個固定ip地址的客戶端總會訪問到同一個後端服務器,這也在一定程度上解決了集羣部署環境下session共享的問題。
- fair:智能調整調度算法,動態的根據後端服務器的請求處理到響應的時間進行均衡分配,響應時間短處理效率高的服務器分配到請求的概率高,響應時間長處理效率低的服務器分配到的請求少;結合了前兩者的優點的一種調度算法。但是需要注意的是Nginx默認不支持fair算法,如果要使用這種調度算法,請安裝upstream_fair模塊。
- url_hash:按照訪問的url的hash結果分配請求,每個請求的url會指向後端固定的某個服務器,可以在Nginx作爲靜態服務器的情況下提高緩存效率。同樣要注意Nginx默認不支持這種調度算法,要使用的話需要安裝Nginx的hash軟件包。
幾種常用web服務器對比
對比項\服務器 | Apache | Nginx | Lighttpd |
Proxy代理 | 非常好 | 非常好 | 一般 |
Rewriter | 好 | 非常好 | 一般 |
Fcgi | 不好 | 好 | 非常好 |
熱部署 | 不支持 | 支持 | 不支持 |
系統壓力 | 很大 | 很小 | 比較小 |
穩定性 | 好 | 非常好 | 不好 |
安全性 | 好 | 一般 | 一般 |
靜態文件處理 | 一般 | 非常好 | 好 |
反向代理 | 一般 | 非常好 | 一般 |
參考文獻:https://www.cnblogs.com/wcwnina/p/8728391.html
四、安裝配置nginx
1.安裝CentOS 7 EPEL倉庫
sudo yum install epel-release
2.安裝Nginx
現在Nginx存儲庫已經安裝在您的服務器上,使用以下yum命令安裝Nginx :
sudo yum install nginx
在對提示回答yes後,Nginx將在服務器上完成安裝。
3.啓動Nginx
Nginx不會自行啓動。要運行Nginx,請輸入:
sudo systemctl start nginx
如果您正在運行防火牆,請運行以下命令以允許HTTP和HTTPS通信:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
打開瀏覽器輸入ip地址看到nginx的首頁就說明你啓動成功了
4.設置開機啓動
sudo systemctl enable nginx
5.配置nginx
使用yum進行安裝的nginx的配置文件在/etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf
nginx.conf:
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
#nginx進程數,建議設置爲等於CPU總核心數。
worker_processes auto;
#全局錯誤日誌定義類型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;#進程pid文件
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
#單個進程最大連接數(最大連接數=連接數*進程數)
#根據硬件調整,和前面工作進程配合起來用,儘量大,但是別把cpu跑到100%就行。每個進程允許的最多連接數,理論上每臺nginx服務器的最大連接數爲。
worker_connections 1024;
}
#設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
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指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設爲 on,如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。注意:如果圖片顯示不正常把這個改成off。
#sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,降低系統uptime。
sendfile on;
#此選項允許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用
tcp_nopush on;
tcp_nodelay on;
#長連接超時時間,單位是秒
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
#虛擬主機的配置
server {
#監聽端口
listen 80 default_server;
listen [::]:80 default_server;
#域名可以有多個,用空格隔開
server_name luischen.cn;
# root /usr/share/nginx/html;
# 重定向至https(按照需求)
rewrite ^(.*)$ https://$host$1 permanent;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
server {
# 監聽433端口
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name luischen.cn;
#root /usr/share/nginx/html;
# ssl證書
ssl_certificate "/etc/nginx/1_luischen.cn_bundle.crt";
ssl_certificate_key "/etc/nginx/2_luischen.cn.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#以下是一些反向代理的配置,可選。
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
#後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
location / {
# 需要代理的端口-也就是nginx指向本地的端口
proxy_pass http://127.0.0.1:8091;
# 超時時間
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
6.nginx啓動和停止命令
啓動
sudo systemctl start nginx
停止
sudo systemctl stop nginx
原文:https://blog.csdn.net/Winter_chen001/article/details/80419958