這篇文章給大家介紹nginx中通過配置http服務(wù)器實(shí)現(xiàn)動(dòng)靜分離),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、黃山區(qū)網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、黃山區(qū)網(wǎng)絡(luò)營銷、黃山區(qū)企業(yè)策劃、黃山區(qū)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供黃山區(qū)建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
安裝
我下載的是1. 14.2 如圖
Nginx配置文件主要分成四部分:main(全局設(shè)置)、server(主機(jī)設(shè)置)、upstream(上游服務(wù)器設(shè)置,主要為反向代理、負(fù)載均衡相關(guān)配置)和 location(URL匹配特定位置后的設(shè)置),每部分包含若干個(gè)指令。main部分設(shè)置的指令將影響其它所有部分的設(shè)置;server部分的指令主要用于指定虛擬主機(jī)域名、IP和端口;upstream的指令用于設(shè)置一系列的后端服務(wù)器,設(shè)置反向代理及后端服務(wù)器的負(fù)載均衡;location部分用于匹配網(wǎng)頁位置(比如,根目錄“/”,“/images”,等等)。他們之間的關(guān)系式:server繼承main,location繼承server;upstream既不會(huì)繼承指令也不會(huì)被繼承。它有自己的特殊指令,不需要在其他地方的應(yīng)用。
#main全局配置{ #events模塊 #http模塊{ #server配置(重點(diǎn)) } }
詳細(xì)配置如下
#main全局配置 user www www; #指定nginx進(jìn)程使用什么用戶啟動(dòng) worker_processes 4; #指定啟動(dòng)多少進(jìn)程來處理請(qǐng)求,一般情況下設(shè)置成CPU的核數(shù),如果開啟了ssl和gzip更應(yīng)該設(shè)置成與邏輯CPU數(shù)量一樣甚至為2倍,可以減少I/O操作。使用grep ^processor /proc/cpuinfo | wc -l查看CPU核數(shù)。 worker_cpu_affinity 0001 0010 0100 1000; #在高并發(fā)情況下,通過設(shè)置將CPU和具體的進(jìn)程綁定來降低由于多核CPU切換造成的寄存器等現(xiàn)場重建帶來的性能損耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。 error_log /data/logs/nginx_error.log crit; #error_log是個(gè)主模塊指令,用來定義全局錯(cuò)誤日志文件。日志輸出級(jí)別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日志最為最詳細(xì),而crit輸出日志最少。 #pid /usr/local/webserver/nginx/nginx.pid; #指定進(jìn)程pid文件的位置。worker_rlimit_nofile 65535;: 用于指定一個(gè)nginx進(jìn)程可以打開的最多文件描述符數(shù)目,這里是65535,需要使用命令“ulimit -n 65535”來設(shè)置。 #events模塊 events{ use select; #use是個(gè)事件模塊指令,用來指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標(biāo)準(zhǔn)的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平臺(tái)上,而kqueue用在BSD系統(tǒng)中。對(duì)于Linux系統(tǒng),epoll工作模式是首選。在操作系統(tǒng)不支持這些高效模型時(shí)才使用select。 worker_connections 65536; #每一個(gè)worker進(jìn)程能并發(fā)處理(發(fā)起)的最大連接數(shù)(包含與客戶端或后端被代理服務(wù)器間等所有連接數(shù))。nginx作為反向代理服務(wù)器,計(jì)算公式 最大連接數(shù) = worker_processes * worker_connections/4,所以這里客戶端最大連接數(shù)是65536,這個(gè)可以增到到8192都沒關(guān)系,看情況而定,但不能超過后面的worker_rlimit_nofile。當(dāng)nginx作為http服務(wù)器時(shí),計(jì)算公式里面是除以2。進(jìn)程的最大連接數(shù)受Linux系統(tǒng)進(jìn)程的最大打開文件數(shù)限制,在執(zhí)行操作系統(tǒng)命令ulimit -n 65536后worker_connections的設(shè)置才能生效。 } #http服務(wù)器 http { include mime.types; #include是個(gè)主模塊指令,實(shí)現(xiàn)對(duì)配置文件所包含的文件的設(shè)定,可以減少主配置文件的復(fù)雜度。類似于Apache中的include方法。 default_type application/octet-stream; #default_type屬于HTTP核心模塊指令,這里設(shè)定默認(rèn)類型為二進(jìn)制流,也就是當(dāng)文件類型未定義時(shí)使用這種方式,例如在沒有配置PHP環(huán)境時(shí),Nginx是不予解析的,此時(shí),用瀏覽器訪問PHP文件就會(huì)出現(xiàn)下載窗口。 #charset gb2312; #charset gb2312; 指定客戶端編碼格式。 #HTTP參數(shù)之客戶端head緩存 server_names_hash_bucket_size 128; #服務(wù)器名字的hash表大小。 client_header_buffer_size 32k; #用來指定來自客戶端請(qǐng)求頭的header buffer 大小。對(duì)于大多數(shù)請(qǐng)求,1K的緩存已經(jīng)足夠了,如果自定義了消息頭或有更大的cookie,可以增大緩存區(qū)大小。 large_client_header_buffers 4 128k;#用來指定客戶端請(qǐng)求中較大的消息頭的緩存最大數(shù)量和大小,4為個(gè)數(shù),128k為大小,最大緩存為4個(gè)128KB。 client_max_body_size 10m; #客戶端請(qǐng)求的最大的單個(gè)文件字節(jié)數(shù)。 允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)。如果有上傳較大文件,請(qǐng)?jiān)O(shè)置它的限制值 client_body_buffer_size 128k; #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)。 sendfile on ; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來輸出文件,減少用戶空間到內(nèi)核空間的上下文切換。對(duì)于普通應(yīng)用設(shè)為 on,如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的負(fù)載。 #sendfile on ; #開啟 tcp_nopush on; 和tcp_nodelay on; 防止網(wǎng)絡(luò)阻塞。 tcp_nopush on; # tcp_nodelay on; keepalive_timeout 65 : #長連接超時(shí)時(shí)間,單位是秒,這個(gè)參數(shù)很敏感,涉及瀏覽器的種類、后端服務(wù)器的超時(shí)設(shè)置、操作系統(tǒng)的設(shè)置,可以另外起一片文章了。長連接請(qǐng)求大量小文件的時(shí)候,可以減少重建連接的開銷,但假如有大文件上傳,65s內(nèi)沒上傳完成會(huì)導(dǎo)致失敗。如果設(shè)置時(shí)間過長,用戶又多,長時(shí)間保持連接會(huì)占用大量資源。 client_body_timeout 60s; #用于設(shè)置客戶端請(qǐng)求主體讀取超時(shí)時(shí)間,默認(rèn)是60s。如果超過這個(gè)時(shí)間,客戶端還沒有發(fā)送任何數(shù)據(jù),nginx將返回Request time out(408)錯(cuò)誤。 send_timeout 60s; #用于指定響應(yīng)客戶端的超時(shí)時(shí)間。這個(gè)超時(shí)僅限于兩個(gè)連接活動(dòng)之間的時(shí)間,如果超過這個(gè)時(shí)間,客戶端沒有任何活動(dòng),Nginx將會(huì)關(guān)閉連接。 #HTTP參數(shù)之FastCGI參數(shù) fastcgi_connect_timeout 300; #指定連接到后端FastCGI的超時(shí)時(shí)間。 fastcgi_send_timeout 300; #指定向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間,這個(gè)值是已經(jīng)完成兩次握手后向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間。 fastcgi_read_timeout 300; #指定接收FastCGI應(yīng)答的超時(shí)時(shí)間,這個(gè)值是已經(jīng)完成兩次握手后接收FastCGI應(yīng)答的超時(shí)時(shí)間。 fastcgi_buffer_size 64k; #用于指定讀取FastCGI應(yīng)答第一部分需要多大的緩沖區(qū),這個(gè)值表示將使用1個(gè)64KB的緩沖區(qū)讀取應(yīng)答的第一部分(應(yīng)答頭),可以設(shè)置為fastcgi_buffers選項(xiàng)指定的緩沖區(qū)大小。 fastcgi_buffers 4 64k; #指定本地需要用多少和多大的緩沖區(qū)來緩沖FastCGI的應(yīng)答請(qǐng)求。如果一個(gè)PHP腳本所產(chǎn)生的頁面大小為256KB,那么會(huì)為其分配4個(gè)64KB的緩沖區(qū)來緩存;如果頁面大小大于256KB,那么大于256KB的部分會(huì)緩存到fastcgi_temp指定的路徑中,但是這并不是好方法,因?yàn)閮?nèi)存中的數(shù)據(jù)處理速度要快于硬盤。一般這個(gè)值應(yīng)該為站點(diǎn)中PHP腳本所產(chǎn)生的頁面大小的中間值,如果站點(diǎn)大部分腳本所產(chǎn)生的頁面大小為256KB,那么可以把這個(gè)值設(shè)置為“16 16k”、“4 64k”等。 fastcgi_busy_buffers_size 128k; #默認(rèn)值是fastcgi_buffers的兩倍。 fastcgi_temp_file_write_size 128k; #表示在寫入緩存文件時(shí)使用多大的數(shù)據(jù)塊,默認(rèn)值是fastcgi_buffers的兩倍。 fastcgi_cache TEST; #示開啟FastCGI緩存并為其指定一個(gè)名稱。開啟緩存非常有用,可以有效降低CPU的負(fù)載,并且防止502錯(cuò)誤的發(fā)生。但是開啟緩存也會(huì)引起很多問題,要視具體情況而定。 fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; #FastCGI緩存指定一個(gè)文件路徑、目錄結(jié)構(gòu)等級(jí)、關(guān)鍵字區(qū)域存儲(chǔ)時(shí)間和非活動(dòng)刪除時(shí)間。 fastcgi_cache_valid 200 302 1h; #用來指定應(yīng)答代碼的緩存時(shí)間。實(shí)例中的值表示將200和302應(yīng)答緩存一個(gè)小時(shí),將301應(yīng)答緩存1天,其他應(yīng)答均緩存1分鐘。 fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; #HTTP參數(shù)之gzip模塊設(shè)置 gzip on; #開啟gzip壓縮輸出 gzip_min_length 1k; #最小壓縮文件大小,頁面字節(jié)數(shù)從header頭的Content-Length中獲取。默認(rèn)值為0,不管多大頁面都?jí)嚎s,建議設(shè)置成大于1K的字節(jié)數(shù),小于1K可能會(huì)越壓越大。 gzip_buffers 4 16k; #壓縮緩沖區(qū),表示申請(qǐng)四個(gè)16K的內(nèi)存作為壓縮結(jié)果流緩存,默認(rèn)是申請(qǐng)與原始數(shù)據(jù)大小相同的內(nèi)存空間來存儲(chǔ)gzip壓縮結(jié)果。 gzip_http_version 1.1; #用于設(shè)置識(shí)別HTTP協(xié)議版本,默認(rèn)是1.1,目前主流瀏覽器都已成指出。(默認(rèn)1.1,前端如果是squid2.5請(qǐng)使用1.0) gzip_comp_level 6; #壓縮等級(jí),1壓縮比最小,處理速度最快,9壓縮比最大,傳輸速度快,但是消耗CPU資源。 gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; #壓縮類型,默認(rèn)就已經(jīng)包含text/html,所以下面就不用再寫了,寫上去也不會(huì)有問題,但是會(huì)有一個(gè)warn。 gzip_vary on; #和http頭有關(guān)系,會(huì)在響應(yīng)頭加個(gè) Vary: Accept-Encoding ,可以讓前端的緩存服務(wù)器緩存經(jīng)過gzip壓縮的頁面,例如,用Squid緩存經(jīng)過Nginx壓縮的數(shù)據(jù)。 gzip_proxied any; #Nginx作為反向代理的時(shí)候啟用,決定開啟或者關(guān)閉后端服務(wù)器返回的結(jié)果是否壓縮,匹配的前提是后端服務(wù)器必須要返回包含”Via”的 header頭。 #server配置 server { listen 80 default; #監(jiān)聽端口,默認(rèn)80,小于1024的要以root啟動(dòng)。可以為listen *:80、listen 127.0.0.1:80等形式。 server_name localhost; # 服務(wù)器名,如localhost、www.example.com,可以通過正則匹配。 index index.html index.htm index.php; root /data/htdocs/www; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置。如果locationURL匹配的是子目錄或文件,root沒什么作用,一般放在server指令里面或/下。 index index.jsp index.html index.htm #定義路徑下默認(rèn)訪問的文件名,一般跟著root放。 #server_name_in_redirect off; location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fcgi.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } } }
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; root D:/root;//重點(diǎn)配置,這里為根目錄路由位置 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
上面代碼監(jiān)聽80端口
http服務(wù)目錄為 D:/root http服務(wù)目錄為。
如果配置 index index.html; 輸入localhost 默認(rèn)訪問 localhost/index.html index 只支持網(wǎng)頁不支持圖片及視頻。
由于沒有配置環(huán)境變量,到nginx根目錄運(yùn)行dos命里。
啟動(dòng):nginx 或者雙擊nginx.exe
關(guān)閉: nginx -s stop 或者(任務(wù)管理器kill掉nginx進(jìn)程)
啟動(dòng)后在瀏覽器輸入:localhost,能夠加載出歡迎界面說明正常啟動(dòng)成功了
關(guān)于nginx中通過配置http服務(wù)器實(shí)現(xiàn)動(dòng)靜分離)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。