linux上部署nginx服務

簡介

高性能、輕量級的HTTP和反向代理web服務器,能夠支持高達 50,000 個併發連接數的響應,多數在Unix/Linux OS 上編譯運行。像國內很多門戶網站:百度、京東、新浪、網易、騰訊、淘寶等廣泛使用。

官網/安裝鏈接

官網:http://nginx.org/en/download.html

安裝教程:https://www.runoob.com/linux/nginx-install-setup.html

https://www.cnblogs.com/Tiancheng-Duan/p/11268148.html

 

安裝與部署

# package下載
$ wget http://nginx.org/download/nginx-1.10.2.tar.gz
$ wget http://www.openssl.org/source/openssl-fips-2.0.10.tar.gz
$ wget http://zlib.net/zlib-1.2.11.tar.gz
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz

# gcc安裝
$ yum install gcc-c++

# openssl安裝
$ tar zxvf openssl-fips-2.0.10.tar.gz
$ cd openssl-fips-2.0.10
$ ./config && make && make install

# pcre安裝
$ tar zxvf pcre-8.40.tar.gz
$ cd pcre-8.40
$ ./configure && make && make install

# zlib安裝
$ tar zxvf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure && make && make install

# nginx安裝
$ tar zxvf nginx-1.10.2.tar.gz
$ cd nginx-1.10.2
$ ./configure && make && make install

啓動與校驗

# 建立libpcre軟鏈接
$ whereis libpcre.so.1
$ ln -s /usr/local/lib/libpcre.so.1 /lib64

# 啓動nginx服務
$ sbin/nginx

# 查看啓動狀態
$ ps -aux | grep nginx 

# 關閉防火牆,可支持外網訪問
$ service iptables stop
$ chkconfig iptables off # 可選擇永久關閉
$ chkconfig --list|grep ipt # 可選擇永久關閉

nginx命令

# 配置文件路徑
$ vi /usr/local/nginx/conf/nginx.conf

# 啓動
$ /usr/local/nginx/sbin/nginx

# 停止
$ /usr/local/nginx/sbin/nginx -s stop

# 重啓
$ /usr/local/nginx/sbin/nginx -s reload

配置詳解

# 轉載於:https://www.cnblogs.com/taiyonghai/p/5610112.html
# 運行用戶
user nobody;
# pid文件
pid logs/nginx.pid;
# worker進程數,通常設置<=CPU數量,auto爲自動檢測,一般設置最大8個即可
worker_processes auto;
# 錯誤日誌
error_log  logs/error.log;

# events模塊中包含nginx中所有處理連接的設置,併發響應能力的關鍵配置
events {
    # 每個進程同時打開的最大連接數(最大併發數)
    worker_connections 102400;
    
    # 告訴nginx收到一個新鏈接通知後接受盡可能多的鏈接
    multi_accept on;
    
    # 一般http 1.1協議下,瀏覽器默認使用兩個併發鏈接
    # 如果是反向代理,nginx需要和客戶端保持連接,還需要和後端服務器保持連接
    # Http服務器時,設置max_client=worker_processes*worker_connections/2
    # 反向代理時,設置max_client=worker_processes*worker_connections/4    
    # 最大可用客戶端數
    max_client 
    
    # 使用非阻塞模型,設置複用客戶端線程的輪訓方法
    use epoll;
}
# http模塊控制着nginx http處理的所有核心特性
http {
    # 打開或關閉錯誤頁面中的nginx版本號等信息
    server_tokens on;
    # !server_tag on;
    # !server_info on;
    # 優化磁盤IO設置,指定nginx是否調用sendfile函數來輸出文件,普通應用設爲on,下載等磁盤IO高的應用,可設爲off
    sendfile on;
    
    # 緩存發送請求,啓用如下兩個配置,會在數據包達到一定大小後再發送數據
    # 這樣會減少網絡通信次數,降低阻塞概率,但也會影響響應的及時性
    # 比較適合於文件下載這類的大數據包通信場景
    # tcp_nopush on;
    # tcp_nodelay on;

    # 設置nginx是否存儲訪問日誌,關閉這個可以讓讀取磁盤IO操作更快
    access_log on;
    # 設置nginx只記錄嚴重錯誤,可減少IO壓力
    # error_log logs/error.log crit;

    # Http1.1支持長連接
    # 降低每個鏈接的alive時間可在一定程度上提高響應連接數量
    # 給客戶端分配keep-alive鏈接超時時間
    keepalive_timeout 30;

    # 設置用戶保存各種key的共享內存的參數,5m指的是5兆
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    # 爲給定的key設置最大的連接數,這裏的key是addr,設定的值是100,就是說允許每一個IP地址最多同時打開100個連接
    limit_conn addr 100;

    # include指在當前文件中包含另一個文件內容
    include mime.types;
    # 設置文件使用默認的mine-type
    default_type text/html;
    # 設置默認字符集
    charset UTF-8;

    # 設置nginx採用gzip壓縮的形式發送數據,減少發送數據量,但會增加請求處理時間及CPU處理時間,需要權衡
    gzip on;
    # 加vary給代理服務器使用,針對有的瀏覽器支持壓縮,有個不支持,根據客戶端的HTTP頭來判斷是否需要壓縮
    gzip_vary on;
    # nginx在壓縮資源之前,先查找是否有預先gzip處理過的資源
    # !gzip_static on;
    # 爲指定的客戶端禁用gzip功能
    gzip_disable "MSIE[1-6]\.";
    # 允許或禁止壓縮基於請求和相應的響應流,any代表壓縮所有請求
    gzip_proxied any;
    # 啓用壓縮的最少字節數,如果請求小於1024字節則不壓縮,壓縮過程會消耗系統資源
    gzip_min_length 1024;
    # 數據壓縮等級,1-9之間,9最慢壓縮比最大,壓縮比越大對系統性能要求越高
    gzip_comp_level 2;
    # 需要壓縮的數據格式
    gzip_types text/plain text/css text/xml text/javascript  application/json application/x-javascript application/xml application/xml+rss; 

    # 靜態文件緩存
    # 開啓緩存的同時也指定了緩存文件的最大數量,20s如果文件沒有被請求則刪除緩存
    open_file_cache max=100000 inactive=20s;
    # 多長時間檢查一次緩存的有效期
    open_file_cache_valid 30s;
    # 有效期內緩存文件最小的訪問次數,只有訪問超過2次的纔會被緩存
    open_file_cache_min_uses 2;
    # 當搜索一個文件時是否緩存錯誤信息
    open_file_cache_errors on;

    # 允許客戶端請求的最大單文件字節數
    client_max_body_size 4m;
    # 客戶端請求頭緩衝區大小
    client_header_buffer_size 4k;

    # 是否啓用對發送給客戶端的URL進行修改
    proxy_redirect off;
    # 後端的Web服務器可以通過X-Forwarded-For獲取用戶真實IP
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # nginx跟後端服務器連接超時時間(代理連接超時)
    proxy_connect_timeout 60;
    # 連接成功後,後端服務器響應時間(代理接收超時)
    proxy_read_timeout 120;
    # 後端服務器數據回傳時間(代理髮送超時)
    proxy_send_timeout 20;
    # 設置代理服務器(nginx)保存用戶頭信息的緩衝區大小
    proxy_buffer_size 32k;
    # proxy_buffers緩衝區,網頁平均在32k以下的設置
    proxy_buffers 4 128k;
    # 高負荷下緩衝大小(proxy_buffers*2)
    proxy_busy_buffers_size 256k;
    # 設定緩存文件夾大小,大於這個值,將從upstream服務器傳
    proxy_temp_file_write_size 256k;
    # 1G內存緩衝空間,3天不用刪除,最大磁盤緩衝空間2G
    proxy_cache_path /home/cache levels=1:2 keys_zone=cache_one:1024m inactive=3d max_size=2g;


    #設定負載均衡服務器列表
    upstream nginx.test.com{
        # 後端服務器訪問規則
        # ip_hash;
        # weight參數表示權重值,權值越高被分配到的機率越大
        # server 10.11.12.116:80 weight=5;
        # PC_Local
        server 10.11.12.116:80;
        # PC_Server
        server 10.11.12.112:80;
        # Notebook
        # server 10.11.12.106:80;
    }

    # server代表虛擬主機,可以理解爲站點(掛載多個站點,只需要配置多個server及upstream節點即可)
    server {
        # 監聽80端口
        listen 80;
        # 識別的域名,定義使用nginx.test.com訪問
        server_name nginx.test.com;
        # 設定本虛擬主機的訪問日誌
        access_log logs/nginx.test.com.access.log;
        
        # 一個域名下匹配多個URI的訪問,使用location進行區分,後面緊跟着的/代表匹配規則
        # 如動態資源訪問和靜態資源訪問會分別指向不同的位置的應用場景
        #
        # 基本語法規則:location [=|~|~*|^~] /uri/ {...} 
        # = 開頭表示精確匹配
        # ^~ 開頭表示uri以某個常規字符串開頭,匹配成功後不再進行正則匹配
        # ~ 開頭表示區分大小寫的正則匹配
        # ~* 開頭表示不區分大小寫的正則匹配
        # !~ 開頭表示區分大小寫的不匹配的正則
        # !~* 開頭表示不區分大小寫的不匹配的正則
        # / 通用匹配,任何請求都會被匹配到
        #
        # 理解如下:
        # 有兩種匹配模式:普通字符串匹配,正則匹配
        # 無開頭引導字符或以=開頭表示普通字符串匹配
        # 以~或~*開頭表示正則匹配,~*表示不區分大小寫
        # 【多個location時,先匹配普通字符串location,再匹配正則location】
        # 只識別URI部分,例如請求爲“/test/1/abc.do?arg=xxx”
        # (1)先查找是否有=開頭的精確匹配,即“location=/test/1/abc.do {...}”
        # (2)再查找普通匹配,以“最大前綴”爲規則,如有以下兩個location
        #    location /test/ {...}
        #    location /test/1/ {...}
        #    則匹配後一項
        # (3)匹配到一個普通location後,搜索並未結束,而是暫存當前結果,並繼續進行正則搜索
        # (4)在所有正則location中找到第一個匹配項後,以此匹配項爲最終結果
        # 【所以正則匹配項,匹配規則受定義前後順序影響,但普通匹配不會】
        # (5)如果未找到正則匹配項,則以(3)中緩存的結果爲最終結果
        # (6)如果一個匹配都沒有,則返回404
        # location =/ {...}與location / {...}的差別
        # 前一個是精確匹配,只響應“/”的請求,所有“/xxx”形式的請求不會以“前綴匹配形式”匹配到它
        # 後一個正相反,所有請求必然都是以“/”開頭,所以沒有其他匹配結果時一定會執行到它
        # location ^~ / {...} ^~的意思是禁止正則匹配,表示匹配到此項後不再進行後續的正則搜索
        # 相當於普通匹配模式匹配成功後就以此結果爲最終結果,停止進行後續的正則匹配
        location / {
            # 定義服務器的默認網站根目錄位置,可以寫相對路徑,也可以寫絕對路徑
            root html;
            # 定義首頁索引文件的名稱
            index index.html index.htm;
            # 定義轉發後端負載服務器組(**配置代理)
            proxy_pass http://nginx.test.com;
        }

        # 定義錯誤提示頁面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
        # 靜態文件,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/{
            root /var/www/virtual/htdocs;
            # 過期時間1天
            expires 1d;
            # 關閉媒體文件日誌
            access_log off;
            log_not_found off;
        }
        # 設定查看Nginx狀態的地址
        location /NginxStatus {
            # !stub_status on; #無此關鍵字
            access_log off;
            auth_basic "NginxStatus";
            auth_basic_user_file conf/htpasswd;
        }
        # 禁止訪問的文件.htxxx
        location ~ /\.ht {
            # deny all;禁止訪問,返回403
            deny all;
            # allow all;允許訪問
        }
    }
    # 網站較多的情況下ngxin又不會請求瓶頸可以考慮掛多個站點,並把虛擬主機配置單獨放在一個文件內,引入進來
    include website.conf;
}

 

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