nginx詳解及配置

        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支持的負載均衡調度算法方式如下:

  1. weight輪詢(默認,常用):接收到的請求按照權重分配到不同的後端服務器,即使在使用過程中,某一臺後端服務器宕機,Nginx會自動將該服務器剔除出隊列,請求受理情況不會受到任何影響。 這種方式下,可以給不同的後端服務器設置一個權重值(weight),用於調整不同的服務器上請求的分配率;權重數據越大,被分配到請求的機率越大;該權重值,主要是針對實際工作環境中不同的後端服務器硬件配置進行調整的。
  2. ip_hash(常用):每個請求按照發起客戶端的ip的hash結果進行匹配,這樣的算法下一個固定ip地址的客戶端總會訪問到同一個後端服務器,這也在一定程度上解決了集羣部署環境下session共享的問題。
  3. fair:智能調整調度算法,動態的根據後端服務器的請求處理到響應的時間進行均衡分配,響應時間短處理效率高的服務器分配到請求的概率高,響應時間長處理效率低的服務器分配到的請求少;結合了前兩者的優點的一種調度算法。但是需要注意的是Nginx默認不支持fair算法,如果要使用這種調度算法,請安裝upstream_fair模塊。
  4. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章