搜尋
首頁php教程PHP开发初次接觸Nginx
初次接觸NginxDec 01, 2016 pm 01:15 PM
nginx

    前段時間,登上公司網站測試用的伺服器,無意中看到一個access.log.gz的文件包,好奇心驅使我將其從遠端伺服器下載到了本地,然後解壓,打開看,是一份訪問日誌,之前總是聽到他們維運的提到訪問日誌訪問日誌,腦子只對它有印象,但不知道具體是什麼,現在知道了,然後,然後不懂就要問呀,了解到了一個叫nginx的伺服器軟體。利用業餘時間簡單的了解後,就想能不能在自己的電腦上安裝一個nginx,平時開發調試時,也可以監控用的最多的幾個端口,雖然感覺並沒有什麼意義,但也可看作是一種學習,畢竟自己動手操作一遍比僅僅只看書或資料體會的會更加深刻。今天只講下配置,隨著學習的深入還會接觸到負載平衡、反向代理、優化等等,講得不正確的地方歡迎指正,相互學習,共同進步!

     Nginx相比Apaceh等,它的優點很多資料了上有,不在此過多強調,無非就是高並發連接、內存消耗少、成本低廉、配置文件簡單等等。

(一)安裝

    在ubuntu系統上安裝nginx,很簡單,一條指令就可以搞定。

sudo apt-get install nginx

   

順便提醒下:如果你在安裝時報錯,終端提示“無法解析或打開軟體包的列表或是狀態文件”,具體如下:

E: Encountered a section with no Package: header

E: Problem with MergeList /var/lib/apt/lists/cn.archive.ubuntu.com_ubuntu_dists_natty_main_i18n_Translation-en

E: 無法解析或開啟軟體包的清單或是狀態檔。

解決方法:

sudo rm /var/lib/apt/lists/* -vf    //如果無法刪除則可以用強制刪除,加個參數-r   

sudo apt-get update

如果你的電腦裡安裝有Apache,而且已經運作了,把Apache停了,因為Apache和Nginx的預設埠都是80。

安裝成功後,就會有一個可執行指令,開啟終端機輸入指令nginx -h,會出現一些指令參數資訊。


nginx -h        查看指令幫助

nginx -v        顯示版本資訊

nginx -V      顯示版本資訊

nginx -V    

nginx -T        測試設定檔並轉儲

nginx -q         在設定測試期間抑制非錯誤訊息

nginx -s signal  發送訊號到主程式,其中訊號有stop,停止nginx;quit,退出;reopen,         

nginx -p prefix  設定前綴路徑,預設為/usr/share/nginx/

nginx -c filename 設定設定文件,預設為/etc/nginx/nginx.conf

ngnix -g的全域指令

註:如果在使用這些指令時報錯,有可能是權限問題,切換到root下執行就可以。

(二)設定檔


主設定檔為nginx.conf,預設路勁在/etc/nginx/下

與PHP相關的是fastcgi_params,與Python相關的是uwsgi_params

如下:

user www www ;

Nginx使用者及群組。 window下不指定

worker_processes 8;

工作進程數目。根據硬體調整,通常等於CPU總核數或總核數的兩倍。

error_log  /var/logs/error.log crit;

錯誤日誌存放路徑以及級別,級別可以為[debug|info|notice|warn|error|crdit]

關於各個錯誤日誌級別,可參考博文http ://blog.csdn.net/solmyr_biti/article/details/50634533

pid /run/nginx.pid;

pid進程識別碼存放路徑。 pid文件為文字文件,內容只有一行, 記錄了該行程的ID。 pid檔案的作用是防止進程啟動多個副本。只有取得pid檔(固定路徑固定檔名)寫入權限(F_WRLCK)的程序才能正常啟動並把自身的PID寫入該檔。其它同一個程式的多餘進程則會自動退出。

利用nginx的pid檔對nginx進行停止、重啟、平滑重啟。

指令格式如下:

kill  -訊號類型` cat /run/nginx.pid`

其中訊號類型主要有:

TERM,INT   快速關閉;        平順關閉,重新載入設定檔

USER1       重新開啟日誌文件,在切割日誌時用途大

USER2       平滑升級執行檔

WINCH       平滑升級執行檔

WINCH   505050505005

指定進程可以開啟的最大描述符數目。

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

現在在Linux 2.6核心下開啟檔案開啟數為65535,worker_rlimit_nofile就對應應該填入65535。

這是因為nginx調度時分配請求到進程並不是那麼的均衡,所以假如填寫10240,總併發量達到3-4萬時就有進程可能超過10240了,這時會返回502錯誤。

events

{

use epoll;

使用epoll的網路I/O 模型。 linux建議epoll,FreeBSD建議採用kqueue,window下不指定。

關於什麼時epoll、select、kqueue可以查相關資料。

worker_connections 204800;

    每個工作進程的最大連線數量。根據硬體調整,和前面工作進程配合起來用,盡量大,但是別把cpu跑到100%就行。每個進程允許的最多連線數,理論上每台nginx伺服器的最大連線數為worker_processes*worker_connections

keepalive_timeout 60;

keepalive逾時時間。

client_header_buffer_size 4k;

客戶端請求頭部的緩衝區大小。這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過1k,但由於一般系統分頁都要大於1k,所以這裡設置為分頁大小。

分頁大小可以用指令getconf PAGESIZE 取得。

但也有client_header_buffer_size超過4k的情況,但是client_header_buffer_size該值必須設定為「系統分頁大小」的整倍數。

open_file_cache max=65535 inactive=60s;

這個將為打開文件指定緩存,默認是沒有啟用的,max指定緩存數量,建議和打開文件數一致,inactive是指經過多長時間文件沒被請求後刪除緩存。

open_file_cache_valid 80s;

這個是指多久檢查一次快取的有效資訊。

open_file_cache_min_uses 1;

open_file_cache指令中的inactive參數時間內檔案的最少使用次數,如果超過這個數字,檔案描述子一直是在快取中開啟的,如上例,如果有一個檔案在inactive時間內一次沒被使用,它將被移除。

}

 ##下面是設定http伺服器,利用它的反向代理功能提供負載平衡支援

http

{

include mime.types;

類型檔案定義

default_type application/octet-stream;


log_format main '$remote_addr - $remote_user [$time_local] "$request" '

).<<

🎝 http_user_agent" "$http_x_forwarded_for"';

log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';

日誌格式設定。

$remote_addr與$http_x_forwarded_for用來記錄客戶端的ip位址;

$remote_user:用來記錄客戶端使用者名稱;

$time_local: 用來記錄存取時間與時區;的url與http協定;

$status: 用來記錄請求狀態;成功是200,

$body_bytes_sent :記錄傳送給客戶端檔案主體內容大小;

$http_referer:用來記錄從那個頁面連結存取過來的;

$http_user_agent:記錄客戶瀏覽器的相關資訊;

通常web伺服器放在反向代理的後面,這樣就不能取得到客戶的IP位址了,透過$remote_add拿到的IP位址是反向代理伺服器的iP位址。反向代理伺服器在轉送請求的http頭資訊中,可以增加x_forwarded_for訊息,用以記錄原有客戶端的IP位址和原來客戶端的請求的伺服器位址。

access_log  logs/host.access.log  main;

access_log  logs/host.access.404.log  log404;

用了log_format指令設定了日誌格式之後,指定了用日誌檔案來存放檔案的指令;

gzip on :

開啟gzip壓縮輸出,減少網路傳輸。

gzip_min_length 1k 

設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭得content-length中取得。預設值是20。建議設定成大於1k的位元組數,小於1k可能會越壓越大。

gzip_buffers 4 16k 

 設定係統取得幾個單位的快取用於儲存gzip的壓縮結果資料流。 4 16k代表以16k為單位,安裝原始資料大小以16k為單位的4倍申請記憶體。

gzip_http_version 1.0 

 用來識別http 協定的版本,早期的瀏覽器不支援Gzip 壓縮,使用者就會看到亂碼,所以為了支援前期版本加上了這個選項,如果你用了Nginx 的反向代理並期望也啟用Gzip 壓縮的話,由於末端通訊是http/1.0,故請設定為1.0。

gzip_comp_level 6 

 gzip壓縮比,1壓縮比最小處理速度最快,9壓縮比最大但處理速度最慢(傳輸快但比較消耗cpu)

gzip_types 

匹配mime類型進行壓縮,無論是否指定,」text/html ”類型總是會被壓縮的。

gzip_proxied any 

 Nginx作為反向代理的時候啟用,決定開啟或關閉後端伺服器回傳的結果是否壓縮,符合的前提是後端伺服器必須傳回包含」Via」的 header頭。

gzip_vary on 

和http頭有關係,會在回應頭加個 Vary: Accept-Encoding ,可以讓前端的快取伺服器快取經過gzip壓縮的頁面,例如,用Squid快取經過Nginx壓縮的資料。 。

server_names_hash_bucket_size 128;

保存伺服器名稱的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。參數hash bucket size總是等於hash表的大小,並且是一路處理器快取大小的倍數。在減少了在記憶體中的訪問次數後,使在處理器中加速查找hash表鍵值成為可能。如果hash bucket size等於一路處理器快取的大小,那麼在查找鍵的時候,最壞的情況下在記憶體中查找的次數為2。第一次是確定儲存單元的位址,第二次是在儲存單元中尋找鍵 值。因此,如果Nginx給出需要增加hash max size 或 hash bucket size的提示,那麼首要的是增大前一個參數的大小.

client_header_buffer_size 4k;

客戶端請求頭部的緩衝區大小。這個可以根據你的系統分頁大小來設置,一般一個請求的頭部大小不會超過1k,但由於一般系統分頁都要大於1k,所以這裡設置為分頁大小。分頁大小可以用指令getconf PAGESIZE取得。

large_client_header_buffers 8 128k;

客戶請求頭緩衝大小。 nginx預設會用client_header_buffer_size這個buffer來讀取header值,如果

header過大,它會使用large_client_header_buffers來讀取。

open_file_cache max=102400 inactive=20s;

這個指令指定快取是否啟用。同時也指定了快取最大數目,以及快取的時間。我們可以設定一個相對高的最大時間,這樣我們可以在它們不活動超過20秒後清除掉

open_file_cache_errors on | off 

預設值:open_file_cache_errors off 使用欄位:http, server, location ,這個指令指定是否在搜尋一個檔案是記錄cache錯誤.

open_file_cache_min_uses

語法:open_file_cache_min_uses number 預設值:open_file_cache_min_uses 1 使用欄位:http, server, location 這個指令指定了一定的時間範圍內的最小指令值檔案數,如果使用更大的值,檔案描述子在cache總是開啟狀態.

open_file_cache_valid

語法:open_file_cache_valid time 預設值:open_file_cache_valid 60 使用欄位:http, server, location 這個指令指定了何時需要檢查open_file_cache中快取項目的有效資訊.

client_max_body_size 300m;

設定透過nginx上傳檔案的大小

sendfile on;

指令是否開啟高效率檔案傳輸模式,sendfilesendinx使用者空間到核心空間的上下文切換。對於普通應用程式設為 on,如果用來進行下載等應用磁碟IO重負載應用,可設定為off,以平衡磁碟與網路I/O處理速度,降低系統的負載。

tcp_nopush on;

此選項允許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用

proxy_connect_timeout 90; 

proxy_read_timeout 180;

連線成功後等候後端伺服器回應時間,其實已經進入後端的排隊之中等候處理(也可以說是後端伺服器處理請求的時間)

proxy_send_timeout 180;伺服器回傳時間,就是在規定時間之內後端伺服器必須傳完所有的資料

proxy_buffer_size 4k;

設定從被代理伺服器讀取的第一部分應答的緩衝區大小,通常情況下這部分應答中包含一個小的應答頭,預設這個值的大小為指令proxy_buffers中指定的一個緩衝區的大小,不過可以將其設定為更小

proxy_buffers 4 32k;

設定用於讀取應答(來自被讀取應答代理伺服器)的緩衝區數目和大小,預設情況也是分頁大小,根據作業系統的差異可能是4k或8k

proxy_busy_buffers_size 64k;

高負載下緩衝大小(proxy_buffers*2)

高負載下緩衝大小(proxy_buffers*2)

當快取被代理的伺服器回應到臨時檔案時,這個選項限制每次寫臨時檔案的大小。 proxy_temp_path(可以在編譯的時候)指定寫到哪那個目錄。

proxy_temp_path /data0/proxy_temp_dir;

proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區

proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

#設定記憶體快取空間大小為200MB,1天沒有被快取的內容自動快取。

keepalive_timeout 120;

長連接超時時間,單位是秒,這個參數很敏感,涉及瀏覽器的種類、後端伺服器的超時設定、作業系統的設置,可以另外起一片文章了。長連線要求大量小檔案的時候,可以減少重建連線的開銷,但假如有大檔案上傳,65s內沒上傳完成會導致失敗。如果設定時間過長,用戶多,長時間保持連線會佔用大量資源。

send_timeout 120;

 用來指定回應客戶端的逾時時間。這個逾時僅限於兩個連線活動之間的時間,如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連線。

tcp_nodelay on;

告訴nginx不要緩存數據,而是一段一段的發送–當需要及時發送數據時,就應該給應用設置這個屬性,這樣發送一小塊數據信息時就不能立即得到返回值。

client_body_buffer_size 512k;

如果把它設定為比較大的數值,例如256k,那麼,無論使用firefox還是IE瀏覽器,來提交任意小於256k的圖片,都很正常。如果註解該指令,使用預設的client_body_buffer_size設置,也就是作業系統頁面大小的兩倍,8k或16k,問題就出現了。

無論使用firefox4.0或IE8.0,提交一個比較大,200k左右的圖片,都回傳500 Internal Server Error錯誤

proxy_intercept_errors on;

表示使nginx阻止HTTPTPTP 。

upstream bakend {

server 127.0.0.1:8027;

server 127.0.0.1:8028;

server 127.0.0.1:8029;這個設計到負載平衡問題。

nginx的upstream目前支援以下種方式的分配

1、輪詢(預設)

每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。

2、weight

指定輪詢幾率,weight和存取比率成正比,用於後端伺服器效能不均的情況。

例如:

upstream bakend {

server 192.168.0.14 weight=10;

server 192.168.0.15ip weight=100;分配,這樣每個訪客固定存取一個後端伺服器,可以解決session的問題。

例如:

upstream bakend {

ip_hash;

server 192.168.0.14:88;

server🜎端伺服器的回應時間來分配請求,回應時間短的優先分配。

upstream backend {

server server1;

server server2;

fair;

}

5、url_hash(第三方)

}

5、url_hash(第三方)

}

5、url_hash(第三方)

}按訪問一個後端伺服器,後端伺服器為快取時比較有效。

例:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash演算法

upstream backend {

server squid1:3128;

3

hash $request_uri;

hash_method crc32;

}

#定義負載平衡設備的Ip及設備狀態

upstream bakend{

ip_hashd

upstream bakend{

ip_hash; .0.1: 8080 weight=2;

server 127.0.0.1:6060;

server 127.0.0.1:7070 backup;

}

在需要使用負載平衡的server中增加每個設備的狀態設定為:

1.down表示單前的server暫時不參與負載

2.weight為weight越大,負載的權重越大。

3.max_fails:允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream模組定義的錯誤

4.fail_timeout:max_fails次失敗後,暫停的時間。

5.backup: 其它所有的非backup機器down或忙碌的時候,請求backup機器。所以這台機器壓力會最輕。

nginx支援同時設定多組的負載平衡,用來給不用的server來使用。

client_body_in_file_only設定為On 可以講client post過來的資料記錄到檔案中用來做debug

client_body_temp_path設定記錄檔的目錄可以設定最多3層目錄

location對URL進行比對.的代理負載平衡

##配置虛擬機

server

{

listen 80;

設定監聽埠 

server_name image.***.com;設定監聽埠 

server_name image.***.com; mp3|exe)$ {

正規表示式,以「mp3或exe」結尾的位址進行負載平衡

proxy_pass http://img_relay$request_uri;

設定被代理伺服器的連接埠或套接字伺服器URL

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

以上三行,目的是將代理伺服器收到的使用者的資訊傳送到真實伺服器上


}


location/face { "

rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect;

}

#這裡牽涉Nginx的Rewrite規則問題,由於篇幅有限,下節再講 http ://img_relay$request_uri;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_p

}

}

}

從上面也可以看出nginx.conf檔案的主要格式是:


......


events

{

......

}

http

{

  ......

     server

      server

     {

      ......

     }

   ......

}

 Nginx的配置是一大特色。可以類比css檔案中樣式的定義,子元素會繼承父元素的樣式定義並且可以選擇是否覆蓋,nginx配置中同樣存在類似的繼承關係。

為理解nginx配置的繼承模型,需要知道nginx配置有好幾個區塊,一個區塊也被稱為一個上下文(context),例如在server上下文中定義的指令存放在server{}區塊中,http上下文中定義的指令存放在http{}區塊中。

在nginx中存在6種可能的上下文,順序由高到低依序是:

Global

Http

Server

If

默認的繼承模型方向是低層繼承高層,而不是橫向或逆向。一個常見的場景是,重寫請求從一個location內部跳到另一個location,那麼在第一個location區塊中定義的指令就會被忽略,而只有第二個location區塊中定義的指令在location context中有效,這裡只是簡單的提下。

其實Nginx配置不只是這些,還有其它的,畢竟Nginx有很多模組,每個模組可能又有些特殊的配置命令,這裡講得只是一些基本的配置信息,等學得,理解的更深刻後,再逐步補充吧,不正之處歡迎批評指涉!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
内存飙升!记一次nginx拦截爬虫内存飙升!记一次nginx拦截爬虫Mar 30, 2023 pm 04:35 PM

本篇文章给大家带来了关于nginx的相关知识,其中主要介绍了nginx拦截爬虫相关的,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

nginx限流模块源码分析nginx限流模块源码分析May 11, 2023 pm 06:16 PM

高并发系统有三把利器:缓存、降级和限流;限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据);高并发系统常见的限流有:限制总并发数(数据库连接池)、限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(nginx的limit_req模块,用来限制每秒的平均速率);另外还可以根据网络连接数、网络流量、cpu或内存负载等来限流。1.限流算法最简单粗暴的

nginx+rsync+inotify怎么配置实现负载均衡nginx+rsync+inotify怎么配置实现负载均衡May 11, 2023 pm 03:37 PM

实验环境前端nginx:ip192.168.6.242,对后端的wordpress网站做反向代理实现复杂均衡后端nginx:ip192.168.6.36,192.168.6.205都部署wordpress,并使用相同的数据库1、在后端的两个wordpress上配置rsync+inotify,两服务器都开启rsync服务,并且通过inotify分别向对方同步数据下面配置192.168.6.205这台服务器vim/etc/rsyncd.confuid=nginxgid=nginxport=873ho

nginx php403错误怎么解决nginx php403错误怎么解决Nov 23, 2022 am 09:59 AM

nginx php403错误的解决办法:1、修改文件权限或开启selinux;2、修改php-fpm.conf,加入需要的文件扩展名;3、修改php.ini内容为“cgi.fix_pathinfo = 0”;4、重启php-fpm即可。

如何解决跨域?常见解决方案浅析如何解决跨域?常见解决方案浅析Apr 25, 2023 pm 07:57 PM

跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加

nginx部署react刷新404怎么办nginx部署react刷新404怎么办Jan 03, 2023 pm 01:41 PM

nginx部署react刷新404的解决办法:1、修改Nginx配置为“server {listen 80;server_name https://www.xxx.com;location / {root xxx;index index.html index.htm;...}”;2、刷新路由,按当前路径去nginx加载页面即可。

nginx怎么禁止访问phpnginx怎么禁止访问phpNov 22, 2022 am 09:52 AM

nginx禁止访问php的方法:1、配置nginx,禁止解析指定目录下的指定程序;2、将“location ~^/images/.*\.(php|php5|sh|pl|py)${deny all...}”语句放置在server标签内即可。

Linux系统下如何为Nginx安装多版本PHPLinux系统下如何为Nginx安装多版本PHPMay 11, 2023 pm 07:34 PM

linux版本:64位centos6.4nginx版本:nginx1.8.0php版本:php5.5.28&php5.4.44注意假如php5.5是主版本已经安装在/usr/local/php目录下,那么再安装其他版本的php再指定不同安装目录即可。安装php#wgethttp://cn2.php.net/get/php-5.4.44.tar.gz/from/this/mirror#tarzxvfphp-5.4.44.tar.gz#cdphp-5.4.44#./configure--pr

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境