Nginx Install

yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
wget http://nginx.org/download/nginx-1.19.0.tar.gz
tar xf nginx-1.19.0.tar.gz
cd nginx-1.19.0

groupadd -f nginx
useradd -g nginx nginx

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-http_gzip_static_module --with-http_sub_module
make && make install

start

cd /usr/local/nginx/
sbin/nginx -t

#nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
#nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

/usr/local/nginx/sbin/nginx
ps aux | grep nginx

check

netstat -tnlp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      12229/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1135/sshd   

setup

... #全局塊
 
events { #events塊
   ...
}

stream { # stream塊
  ...
}

http #http塊
{
    ... #http全局塊
    server #server塊
    {
        ... #server全局塊
        location [PATTERN] #location塊
        {
            ...
        }
        location [PATTERN]
        {
            ...
        }
    }
    server
    {
      ...
    }
    ... #http全局塊
}

# 1、全局塊:配置影響nginx全局的指令。一般有運行nginx服務器的用戶組,nginx進程pid存放路徑,日誌存放路徑,配置文件引入,允許生成worker process數等。
# 
# 2、events塊:配置影響nginx服務器或與用戶的網絡連接。有每個進程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網絡連接序列化等。
# 
# 3、http塊:可以嵌套多個server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日誌自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數等。
# 
# 4、server塊:配置虛擬主機的相關參數,一個http中可以有多個server。
# 
# 5、location塊:配置請求的路由,以及各種頁面的處理情況。

# 定義Nginx運行的用戶和用戶組
user nginx nginx;

# 啟動進程, 通常設置成和cpu的數量相等
worker_processes auto;

# 這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,但是nginx分配請求並不是那麼均勻,所以最好與ulimit -n的值保持一致。
worker_rlimit_nofile 102400;

# 這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,但是nginx分配請求並不是那麼均勻,所以最好與ulimit -n的值保持一致。

# 全局錯誤日誌及PID文件
error_log /usr/local/nginx/logs/error.log;

# 錯誤日誌定義等級,[ debug | info | notice | warn | error | crit ]
pid /usr/local/nginx/nginx.pid;

# 一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(系統的值ulimit -n)
worker_rlimit_nofile 65535;

# 工作模式及連接數上限
events {
# epoll是多路復用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上內核,可以大大提高nginx的性能
    use epoll;
    worker_connections 102400; # 單個後台worker process進程的最大並發鏈接數 (最大連接數=連接數*進程數)
    multi_accept on; # 盡可能多的接受請求
}

#設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
    # 設定mime類型,類型由mime.type文件定義
    include mime.types;
    default_type application/octet-stream;
    # 設定日誌格式
    access_log /usr/local/nginx/log/nginx/access.log;
    sendfile on;
    # sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對於普通應用必須設為 on
    # 如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
    #autoindex on; # 開啟目錄列表訪問,合適下載服務器,默認關閉。
    tcp_nopush on; # 防止網絡阻塞
    keepalive_timeout 60;
    # keepalive超時時間,客戶端到服務器端的連接持續有效時間,當出現對服務器的後,繼請求時,keepalive-timeout功能可避免建立或重新建立連接。
    tcp_nodelay on; # 提高數據的實時響應性
    
    #開啟gzip壓縮
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2; # 壓縮級別大小,最大為9,值越小,壓縮後比例越小,CPU處理更快。#值越大,消耗CPU比較高。
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    client_max_body_size 10m; #允許客戶端請求的最大單文件字節數
    client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數,
    proxy_connect_timeout 90; #nginx跟後端服務器連接超時時間(代理連接超時)
    proxy_send_timeout 90; #後端服務器數據回傳時間(代理髮送超時)
    proxy_read_timeout 90; #連接成功後,後端服務器響應時間(代理接收超時)
    proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
    proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的話,這樣設置
    proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)

    #設定請求緩衝
    large_client_header_buffers 4 4k;
    client_header_buffer_size 4k;
    # 客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過1k
    # 不過由於一般系統分頁都要大於1k,所以這裡設置為分頁大小。分頁大小可以用命令getconf PAGESIZE取得。
    open_file_cache max=102400 inactive=20s;
    # 這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數量,建議和打開文件數一致,inactive是指經過多長時間文件沒被請求後刪除緩存。
    open_file_cache_valid 30s;
    # 這個是指多長時間檢查一次緩存的有效信息。
    open_file_cache_min_uses 1;
    # open_file_cache指令中的inactive參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive
    # 包含其它配置文件,如自定義的虛擬主機
    include vhost/*.conf;
}

lb

http {
	upstream webs {
		server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
		server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
	}
	
	server {
		listen 8080;
		server_name localhost;

		location ~ /{
			root /data/8080/;
			index index.html index.htm;
		}
	}
	
	server {
		listen       80;
		server_name  localhost;

		location / {
				root   html;
				index  index.html index.htm;
				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://lb;
			}
		}
}