Ubuntu nginx 配置指導二

Ubuntu nginx 配置指導二

1. nginx 內置變量

  • $remote_addr;
    #存放了客戶端的地址,注意是客戶端的公網IP,也就是一家人訪問一個網站,則會顯示爲路由器的公網IP。
  • $args;
    #變量中存放了URL中的指令,例如http://www.youyou.net/main/index.do?
    id=20190221&partner=search中的id=20190221&partner=search
  • $document_root;
    #保存了針對當前資源的請求的系統根目錄,如/apps/nginx/html。
  • $document_uri;
    #保存了當前請求中不包含指令的URI,注意是不包含請求的指令,比如
    http://www.youyou.net/main/index.do?id=20190221&partner=search會被定義爲/main/index.do 。
  • $host;
    #存放了請求的host名稱。
  • $http_user_agent;
    #客戶端瀏覽器的詳細信息
  • $http_cookie;
    #客戶端的cookie信息。
  • limit_rate 10240;
    echo $limit_rate;
    #如果nginx服務器使用limit_rate配置了顯示網絡速率,則會顯示,如果沒有設置, 則顯示0。
  • $remote_port;
    #客戶端請求Nginx服務器時隨機打開的端口,這是每個客戶端自己的端口。
  • $remote_user;
    #已經經過Auth Basic Module驗證的用戶名。
  • $request_body_file;
    #做反向代理時發給後端服務器的本地資源的名稱。
  • $request_method;
    #請求資源的方式,GET/PUT/DELETE等
  • $request_filename;
    #當前請求的資源文件的路徑名稱,由root或alias指令與URI請求生成的文件絕對路徑,
    如/apps/nginx/html/main/index.html
  • $request_uri;
    #包含請求參數的原始URI,不包含主機名,如:/main/index.do?id=20190221&partner=search 。
  • $scheme;
    #請求的協議,如ftp,https,http等。
  • $server_protocol;
    #保存了客戶端請求資源使用的協議的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等。
  • $server_addr;
    #保存了服務器的IP地址。
  • $server_name;
    #請求的服務器的主機名。
  • $server_port;
    #請求的服務器的端口號。

2. nginx自定義變量

假如需要自定義變量名稱和值,使用指令set $variable value;  
則方法如下:  
Syntax: set $variable value;   
Default: —   
Context: server, location, if  
set $name youyou;
echo $name;
set $my_port $server_port;
echo $my_port;
echo "$server_name:$server_port";

3. nginx if判斷

屬於ngx_http_rewrite_module模塊指令

=#比較變量和字符串是否相等,相等時if指令認爲該條件爲true,反之爲false。
!=: #比較變量和字符串是否不相等,不相等時if指令認爲條件爲true,反之爲false。
~: #表示在匹配過程中區分大小寫字符,(可以通過正則表達式匹配),滿足匹配條件爲真,不滿足爲假。
!~:#爲區分大小寫字符且匹配結果不匹配,不滿足爲真,滿足爲假。
~*: #表示在匹配過程中不區分大小寫字符,(可以通過正則表達式匹配),滿足匹配條件爲真,不滿足爲假。
!~*: #爲不區分大小字符且匹配結果不匹配,滿足爲假,不滿足爲真。
-f 和 ! -f: #判斷請求的文件是否存在和是否不存在
-d 和 ! -d: #判斷請求的目錄是否存在和是否不存在。
-x 和 ! -x: #判斷文件是否可執行和是否不可執行。
-e 和 ! -e: #判斷請求的文件或目錄是否存在和是否不存在(包括文件,目錄,軟鏈接)。
# 範例
location /main {
    index index.html;
    default_type text/html;
    if ( $scheme = http ){
        echo "if-----> $scheme";
    }
    if ( $scheme = https ){
        echo "if ----> $scheme";
    }
}

4. nginx break指令

屬於ngx_http_rewrite_module模塊指令
用於中斷當前相同作用域(location)中的其他Nginx配置,與該指令處於同一作用域的Nginx配置中,位於它前面的配置生效,位於後面的指令配置就不再生效了,Nginx服務器在根據配置處理請求的過程中遇到該指令的時候,回到上一層作用域繼續向下讀取配置,該指令可以在server塊和location塊以及if塊中使用

location /main {
    root /data/nginx/html/pc;
    index index.html;
    default_type text/html;
    set $name youyou;
    echo $name;
    break;
    set $my_port $server_port;
    echo $my_port;
}

5. nginx return指令

屬於ngx_http_rewrite_module模塊指令
從nginx版本0.8.2開始支持,return用於完成對請求的處理,並直接向客戶端返回響應狀態碼,比如其可以指定重定向URL(對於特殊重定向狀態碼,301/302等) 或者是指定提示文本內容(對於特殊狀態碼403/500等),處於此指令後的所有配置都將不被執行,return可以在server、if和location塊進行配置,用法如下:

return code; #返回給客戶端指定的HTTP狀態碼
return code (text); #返回給客戶端的狀態碼及響應體內容,可以調用變量
return code URL; #返回給客戶端的URL地址

6. nginx rewrite指令

屬於ngx_http_rewrite_module模塊指令

rewrite regex replacement [flag];

rewrite將用戶請求的URI基於regex所描述的模式進行檢查,匹配到時將其替換爲表達式指定的新的URI。 注意:如果在同一級配置塊中存在多個rewrite規則,那麼會自下而下逐個檢查;被某條件規則替換完成後,會重新一輪的替換檢查,隱含有循環機制,但不超過10次;如果超過,提示500響應碼,[flag]所表示的標誌位用於控制此循環機制,如果替換後的URL是以http://或https://開頭,則替換結果會直接以重向返回給客戶端, 即永久重定向301

  1. flag介紹
    redirect;
    #臨時重定向,重寫完成後以臨時重定向方式直接返回重寫後生成的新URL給客戶端,由客戶端重新發起請求;使用相對路徑,或者http://或https://開頭,狀態碼:302
    permanent;
    #重寫完成後以永久重定向方式直接返回重寫後生成的新URL給客戶端,由客戶端重新發起請求,狀態碼:301
    last;
    #對某個location的URL匹配成功後會停止當前location的後續rewrite規則,並結束當前location,然後將匹配生成的新URL跳轉至其他location繼續匹配,直到沒有location可匹配後將最後一次location的數據返回給客戶端。
    break;
    #重寫完成後停止對當前URL在當前location中後續的其它重寫操作,而後直接將匹配結果返還給客戶端即結束循環並返回數據給客戶端,建議在location中使用
    
  2. 臨時重定向不會緩存域名解析記錄(A記錄),但是永久重定向會緩存
  3. 全站https
    server {
        listen 443 ssl;
        listen 80;
        ssl_certificate /apps/nginx/certs/www.youyou.net.crt;
        ssl_certificate_key /apps/nginx/certs/www.youyou.net.key;
        ssl_session_cache shared:sslcache:20m;
        ssl_session_timeout 10m;
        server_name www.youyou.net;
        location / {
            root /data/nginx/html/pc;
            index index.html;
            if ($scheme = http ){ 
            #未加條件判斷,會導致死循環
            rewrite / https://www.youyou.net permanent;
            }
        }
    }
    

7. nginx 防盜鏈

基於訪問安全考慮,nginx支持通過ungx_http_referer_module模塊 https://nginx.org/en/docs/http/ngx_http_referer_module.html#valid_referers 檢查訪問請求的referer信息是否有效實現防盜鏈功能,定義方式如下:

[root@s2 ~]# vim /apps/nginx/conf/conf.d/pc.conf
location /images {
    root /data/nginx/html/pc;
    index index.html;
    valid_referers none blocked server_names
    *.example.com example.* www.example.org/galleries/
    ~\.google\.;
    # 定義放通的網址,如搜索引擎之類的。然後如果不在這裏面的。就會返回403
    if ($invalid_referer) {
    return 403;
    }
}

8. nginx 支持php fastcgi

[root@s2 ~]# vim /apps/nginx/conf/conf.d/pc.conf #在指定文件配置fastcgi
   location ~ \.php$ {
       root /data/nginx/php; #$document_root調用root目錄
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       #fastcgi_param SCRIPT_FILENAME /data/nginx/php$fastcgi_script_name;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       #如果SCRIPT_FILENAME是絕對路徑則可以省略root /data/nginx/php;
       include fastcgi_params;
   }
#重啓Nginx並訪問web測試

php 配置優化

[root@s2 ~]# grep "^[a-Z]" /etc/php-fpm.conf
include=/etc/php-fpm.d/*.conf
pid = /run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = yes #是否後臺啓動
[root@s2 ~]# cat /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000 #監聽地址及IP
listen.allowed_clients = 127.0.0.1 #允許客戶端從哪個源IP地址訪問,要允許所有行首加 ;註釋即可
user = nginx #php-fpm啓動的用戶和組,會涉及到後期文件的權限問題
group = nginx
pm = dynamic #動態模式進程管理
pm.max_children = 500 #靜態方式下開啓的php-fpm進程數量,在動態方式下他限定php-fpm的最大進程數
pm.start_servers = 100 #動態模式下初始進程數,必須大於等於pm.min_spare_servers和小於等於
pm.max_children的值。
pm.min_spare_servers = 100 #最小空閒進程數
pm.max_spare_servers = 200 #最大空閒進程數
pm.max_requests = 500000 #進程累計請求回收值,會回收並重新生成新的子進程
pm.status_path = /pm_status #狀態訪問URL
ping.path = /ping #ping訪問動地址
ping.response = ping-pong #ping返回值
slowlog = /var/log/php-fpm/www-slow.log #慢日誌路徑
php_admin_value[error_log] = /var/log/php-fpm/www-error.log #錯誤日誌
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files #phpsession保存方式及路徑
php_value[session.save_path] = /var/lib/php/session #當時使用file保存session的文件路徑
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章