nginx安裝、編譯引數及配置變數
目錄
安裝配置
1.使用包管理工具
在Debian、Ubuntu下
# apt-get install nginx
在RedHat 、CentOS 下
在/etc/yum.repo.d/下新建一個倉庫檔案nginx.repo
,新增如下內容
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1
然後直接yum
安裝
# yum makecache # yum install nginx - 啟動 # /etc/init.d/nginx start - 停止 # /etc/init.d/nginx stop - 過載配置 # /etc/init.d/nginx reload
在mac下
- 安裝 $ brew install nginx - 啟動 $ nginx - 停止 $ nginx -s stop - 過載配置 $ nginx -s reload
2. 原始碼安裝
在生產環境下,由於包管理安裝的nginx的方式可定義性不高,安裝的版本也是較舊的版本,不能使用最新的特性。這時候可以選擇原始碼安裝的方式,可以高度自定義。
接下來以安裝nginx的1.14.0為例
- 安裝依賴環境 # apt-get install build-essential libc6 libpcre3 libpcre3-dev libpcrecpp0 libssl0.9.8 libssl-dev zlib1g zlib1g-dev lsb-base openssl libssl-devlibgeoip1 libgeoip-devgoogle-perftools libgoogle-perftools-dev libperl-devlibgd2-xpm-dev libatomic-ops-dev libxml2-dev libxslt1-dev python-dev - 下載原始碼包 # wget http://nginx.org/download/nginx-1.14.0.tar.gz - 解壓 # tar zxvf nginx-1.14.0.tar.gz - 進入目錄,生成makefile # cd nginx-1.14.0 # ./configure \ ./configure --prefix=/etc/nginx \ --sbin-path=/usr/sbin/nginx \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/var/run/nginx.pid \ --lock-path=/var/run/nginx.lock \ --http-client-body-temp-path=/var/cache/nginx/client_temp \ --http-proxy-temp-path=/var/cache/nginx/proxy_temp \ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \ --http-scgi-temp-path=/var/cache/nginx/scgi_temp \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-threads \ --with-stream \ --with-stream_ssl_module \ --with-http_slice_module \ --with-mail \ --with-mail_ssl_module \ --with-file-aio \ --with-http_v2_module \ --with-openssl=/usr/local/openssl
上面的引數可以根據需要進行選擇,可參照下方[編譯引數詳解](#3. 編譯引數詳解)。如果沒有特定的需求直接執行./configure
就好了。安裝完成後可以通過nginx -V
檢視選擇的模組。
接下來進行編譯安裝
# make && make install
安裝完成之後
- 啟動nginx # nginx - 停止nginx # nginx -s stop - 過載配置 # nginx -s reload
3. 編譯引數詳解
引數選項 | 基本解釋 |
---|---|
–help | 列印幫助資訊 |
–prefix=PATH | Nginx安裝部署後的根目錄 預設為/usr/local/nginx目錄。注意:這個目標的設定會影響其他引數中的相對目錄。例如,如果設定了–sbin-path=sbin/nginx,那麼實際上可執行檔案會被放到/usr/local/nginx/sbin/nginx中 |
–sbin-path=PATH | 可執行檔案的放置路徑 <prefix>/sbin/nginx |
–conf-path=PATH | 配置檔案的放置路徑 <prefix>/conf/nginx.conf |
–error-log-path=PATH | error日誌檔案的放置路徑。error日誌用於定位問題,可輸出多種級別(包括debug除錯級別)的日誌。它的配置非常靈活,可以在nginx.conf裡配置為不同請求的日誌並輸出到不同的log檔案中。這裡是預設的Nginx核心日誌路徑 <prefix>/logs/error.log |
–pid-path=PATH | pid檔案的存放路徑。這個檔案裡僅以ASC II碼存放著Nginx master的程序ID,有了這個程序ID,在使用命令列(例如nginx -s reload)通過讀取master程序ID向master程序傳送訊號時,才能對執行中的Nginx服務產生作用 <prefix>/logs/nginx.pid |
–lock-path=PATH | lock檔案的放置路徑 <prefix>/logs/nginx.lock |
–user=USER | 指定Nginx worker程序執行時所屬的使用者。注意:不要將啟動worker程序的使用者設為root,在worker程序出問題時master程序要具備停止/啟動worker程序的能力 |
–group=GROUP | 指定Nginx worker程序執行時所屬的組 |
–build=NAME | configure執行時與編譯期間產生的臨時檔名稱 |
–builddir=DIR | configure執行時與編譯期間產生的臨時檔案放置的目錄,包括產生的Makefile、C原始檔、目標檔案、可執行檔案等 <nginx source path>/objs |
–with-rtsig_module | 使用rtsig module處理事件驅動 預設情況下,Nginx是不安裝rtsig module的,即不會把rtsig module編譯進最終的Nginx二進位制程式中 |
–with-select_module | 使用select module處理事件驅動 select是Linux提供的一種多路複用機制,在epoll呼叫沒有誕生前,例如在Linux 2.4及其之前的核心中,select用於支援伺服器提供高併發連線 預設情況下,Nginx是不安裝select module的,但如果沒有找到其他更好的事件模組,該模組將會被安裝 |
–without-select_module | 不安裝select module |
–with-poll_module | 使用poll module處理事件驅動 poll的效能與select類似,在大量併發連線下效能都遠不如epoll。預設情況下,Nginx是不安裝poll |
–without-poll_module | 不安裝poll module |
–with-file-aio | 使用AIO方式處理事件驅動 (IO非同步大幅度提升效能,需要核心 2.6.22 以上的版本) |
–with-ipv6 | 使Nginx支援IPv6 |
–with-https_ssl_module | 安裝https ssl module。該模組使Nginx支援SSL協議,提供HTTPS服務。 注意:該模組的安裝依賴於OpenSSL開源軟體,即首先應確保已經在之前的引數中配置了OpenSSL需要安裝 OpenSSL library yum install openssl-devel | # apt-get install libssl-dev |
–with-https_spdy_module | 開啟 ngx_https_spdy_module 模組。是Google開發的基於TCP的應用層協議,用以最小化網路延遲,提升網路速度,優化使用者的網路使用體驗。SPDY並不是一種用於替代HTTP的協議,而是對HTTP協議的增強 |
–with-https_realip_module | 開啟 ngx_https_realip_module 模組 。此模組支援顯示真實來源IP地址,主要用於NGINX做前端負載均衡伺服器使用。 |
–with-https_addition_module | 開啟 https addtion module。該模組可以在返回客戶端的HTTP包體頭部或者尾部增加內容。作為一個輸出過濾器,支援不完全緩衝,分部分響應請求,遊戲伺服器不必安裝,入口網站可以安裝,有利於被搜尋引擎收錄頁面資訊。 |
–with-https_xslt_module | 開啟 ngx_https_xslt_module 模組 這個模組可以使XML格式的資料在發給客戶端前加入XSL渲染,0.7.8後面版本才可以使用。 |
–with-https_image_filter_module | 開啟 ngx_https_image_filter_module 模組 。這個模組將符合配置的圖片實時壓縮為指定大小(width*height)的縮圖再發送給使用者,目前支援JPEG、PNG、GIF格式。 注意:這個模組依賴於開源的libgd庫,在安裝前確保作業系統已經安裝了libgd,是nginx提供的整合圖片處理模組,支援nginx-0.7.54以後的版本,在網站訪問量不是很高磁碟有限不想生成多餘的圖片檔案的前提下可,就可以用它實時縮放圖片,旋轉圖片,驗證圖片有效性以及獲取圖片寬高以及圖片型別資訊,由於是即時計算的結果,所以網站訪問量大的話,不建議使用。 |
–with-https_geoip_module | 開啟 ngx_https_geoip_module 模組,這個模組基於客戶端的IP地址建立一些ngx_https_geoip_module變數,並與MaxMindGeoIP檔案進行匹配,該模組僅用於0.7.63和0.8.6版本之後。 需要安裝 yum install geoip-devel | apt-get install geoip-bin geoip-database libgeoip-dev |
–with-https_sub_module | 開啟 ngx_https_sub_module 。該模組可以在Nginx返回客戶端的HTTP響應包中將指定的字串替換為自己需要的字串 例如,在HTML的返回中,將</head>替換為</head><script language=”javascript” src=”$script”></script> |
–with-https_dav_module | 開啟 ngx_https_dav_module 模組。這個模組可以讓Nginx支援Webdav標準,如支援Webdav協議中的PUT、DELETE、COPY、MOVE、MKCOL等請求 預設情況下為關閉,需編譯開啟,如果開啟WebDAV擴充套件動作模組,(可為檔案和目錄指定許可權) |
–with-https_flv_module | 開啟 ngx_https_flv_module 模組 ,這個模組可以在向客戶端返回響應時,對FLV格式的視訊檔案在header頭做一些處理,使得客戶端可以觀看、拖動FLV視訊 |
–with-https_mp4_module | 開啟 ngx_https_mp4_module 模組,該模組使客戶端可以觀看、拖動MP4視訊 |
–with-https_gunzip_module | 開啟 ngx_https_gunzip_module 模組,是一個過濾器, 它為不支援“gzip”編碼方法的客戶端解壓具有“Content-Encoding: gzip”頭的響應。 當希望儲存壓縮後的資料以節省空間和減少I/O開銷,又不希望對那些不支援gzip壓縮的客戶端造成不利影響時, 此模組會派上用途。 |
–with-https_gzip_static_module | 開啟 ngx_https_gzip_static_module 模組 ,允許傳送以“.gz”作為副檔名的預壓縮檔案,防止檔案被重複壓縮,以替代傳送普通檔案。如果採用gzip模組把一些文件進行gzip格式壓縮後再返回給客戶端,那麼對同一個檔案每次都會重新壓縮,這是比較消耗伺服器CPU資源的。 |
–with-https_auth_request_module | 開啟 ngx_https_auth_request_module 模組 |
–with-https_random_index_module | 開啟 ngx_https_random_index_module模組 ,該模組在客戶端訪問某個目錄時,隨機返回該目錄下的索引檔案 |
–with-https_secure_link_module | 開啟 ngx_https_secure_link_module ,該模組提供一種驗證請求是否有效的機制。例如,它會驗證URL中需要加入的token引數是否屬於特定客戶端發來的,以及檢查時間戳是否過期(計算和檢查要求所需的安全連結網址(防盜鏈)) |
–with-https_degradation_module | 開啟 ngx_https_degradation_module 模組,該模組針對一些特殊的系統呼叫(如sbrk)做一些優化,允許在記憶體不足的情況下返回204或444碼。 |
–with-https_stub_status_module | 開啟 ngx_https_stub_status_module 模組,該模組可以讓執行中的Nginx提供效能統計頁面,獲取相關的併發連線、請求的資訊 |
–without-https_charset_module | 關閉 https charset module。這個模組可以將伺服器發出的HTTP響應重編碼 |
–without-https_gzip_module | 關閉 ngx_https_gzip_module模組,在伺服器發出的HTTP響應包中,這個模組可以按照配置檔案指定的content-type對特定大小的HTTP響應包體執行gzip壓縮 |
–without-https_ssi_module | 關閉 ngx_https_ssi_module模組,該模組可以在向用戶返回的HTTP響應包體中加入特定的內容,如HTML檔案中固定的頁頭和頁尾 |
–without-https_userid_module | 關閉 ngx_https_userid_module模組,這個模組可以通過HTTP請求頭部資訊裡的一些欄位認證使用者資訊,以確定請求是否合法 |
–without-https_access_module | 關閉 訪問模組,這個模組可以根據IP地址限制能夠訪問伺服器的客戶端 |
–without-https_auth_basic_module | 禁用基本的認證模組,這個模組可以提供最簡單的使用者名稱/密碼認證 |
–without-https_autoindex_module | 禁用自動索引模組,該模組提供簡單的目錄瀏覽功能 |
–without-https_geo_module | 禁用Geo模組,這個模組可以定義一些變數,這些變數的值將與客戶端IP地址關聯,這樣Nginx針對不同的地區的客戶端(根據IP地址判斷)返回不一樣的結果,例如不同地區顯示不同語言的網頁 |
–without-https_map_module | 禁用Map模組,這個模組可以建立一個key/value對映表,不同的key得到相應的value,這樣可以針對不同的URL做特殊處理。例如,返回302重定向響應時,可以期望URL不同時返回的Location欄位也不一樣 |
–without-https_split_clients_module | 切割客戶端IP,該模組會根據客戶端的資訊,例如IP地址、header頭、cookie等,來區分處理,nginx 的 Split Clients(切割客戶端IP)的作用是使用 MurmurHash2 雜湊演算法對客戶端的IP進行運算,得到一個32位的整數,這個數值範圍從 0~4294967296,匹配不同的區間位置,得到不同的值賦予某個變數。最後根據這變數的不同,作不同的邏輯處理。 |
–without-https_referer_module | 該模組可以根據請求中的referer欄位來拒絕請求 |
–without-https_rewrite_module | 禁用Rewrite模組,該模組提供HTTP請求在Nginx服務內部的重定向功能,依賴PCRE庫 |
–without-https_proxy_module | 禁用代理模組。該模組提供基本的HTTP反向代理功能 |
–without-https_fastcgi_module | 禁用FastCGI模組。該模組提供FastCGI功能 |
–without-https_uwsgi_module | 禁用uwsgi模組。該模組提供uWSGI功能 |
–without-https_scgi_module | 禁用scqi模組。該模組提供SCGI功能 |
–without-https_memcached_module | 禁用Memcached模組。該模組可以使得Nginx直接由上游的memcached服務讀取資料,並簡單地適配成HTTP響應返回給客戶端 |
–without-https_limit_conn_module | 禁用limit_conn_zone模組,該模組針對某個IP地址限制併發連線數。例如,使Nginx對一個IP地址僅允許一個連線。 |
–without-https_limit_req_module | 禁用Limit Requests模組。該模組針對某個IP地址限制併發請求數 |
–without-https_empty_gif_module | 禁用Empty Gif模組。該模組可以使得Nginx在收到無效請求時,立刻返回記憶體中的1×1畫素的GIF圖片。這種好處在於,對於明顯的無效請求不會去試圖浪費伺服器資源 |
–without-https_browser_module | 禁用Browser 模組。該模組會根據HTTP請求中的user-agent欄位(該欄位通常由瀏覽器填寫)來識別瀏覽器 |
–without-https_upstream_hash_module | 禁用Upstream模組。該模組用於配置負載均衡結構 |
–without-https_upstream_ip_hash_module | 禁用Upstream模組 該模組提供當Nginx與後端server建立連線時,會根據IP做雜湊運算來決定與後端哪臺server通訊,這樣可以實現負載均衡 |
–without-https_upstream_least_conn_module | 禁用Upstream模組 中的 least 負載均衡演算法 |
–without-https_upstream_keepalive_module | 禁用Upstream模組 中的 keepalive 負載均衡演算法 |
–with-https_perl_module | 需要安裝 perl # yum install perl-ExtUtils-Embed | # apt-get install libperl-dev |
–with-perl_modules_path=PATH | perl module放置的路徑。只有使用了第三方的perl module,才需要配置這個路徑 |
–with-perl=PATH | perl binary放置的路徑。如果配置的Nginx會執行Perl指令碼,那麼就必須要設定此路徑 |
–https-log-path=PATH | access日誌放置的位置。每個HTTP請求到結束時都會記錄 <prefix>/logs/access.log |
–https-client-body-temp-path=PATH | 處理HTTP請求時如果請求的包體需要暫時存放到臨時磁碟檔案中,則把這樣的臨時檔案放置到該路徑下 <prefix>/client_body_temp |
–https-proxy-temp-path=PATH | Nginx作為HTTP反向代理伺服器時,上游伺服器產生的HTTP包體在需要臨時存放到磁碟檔案時,這樣的臨時檔案將放到該路徑下 <prefix>/proxy_temp |
–https-fastcgi-temp-path=PATH | Fastcgi所使用臨時檔案的放置目錄 <prefix>/fastcgi_temp |
–https-uwsgi-temp-path=PATH | uWSGI所使用臨時檔案的放置目錄 <prefix>/uwsgi_temp |
–https-scgi-temp-path=PATH | SCGI所使用臨時檔案的放置目錄 <prefix>/scgi_temp |
–without-https | 禁用HTTP服務 |
–without-https-cache | 禁用HTTP 緩衝功能 |
–with-mail | 開啟郵件服務代理(mail server proxy)模組,支 持POP3, IMAP4和SMTP。該功能預設禁用 |
–with-mail_ssl_module | 開啟郵件代理服務對SSL的支援。該功能預設禁用 |
–without-mail_pop3_module | 在郵件代理下禁用POP3功能。在開啟郵件代理模組後該功能預設啟用 |
–without-mail_imap_module | 對郵件代理伺服器禁用IMAP4模組,在開啟郵件代理模組後該功能預設啟用 |
–without-mail_smtp_module | 對於郵件代理伺服器禁用SMTP模組,在開啟郵件代理模組後該功能預設啟用 |
–with-google_perftools_module | Google的針對nginx效能調優的工具,需要安裝:yum install gperftools gperftools-devel |
–with-cpp_test_module | C預編譯器測試模組 |
–add-module=PATH | 當在Nginx里加入第三方模組時,通過這個引數指定第三方模組的路徑 |
–with-cc=PATH | C編譯器的路徑 |
–with-cpp=PATH | C預編譯器的路徑 |
–with-cc-opt=OPTIONS | 如果希望在Nginx編譯期間指定加入一些編譯選項,如指定巨集或者使用-I加入某些需要包含的目錄,這時可以使用該引數達成目的 |
–with-ld-opt=OPTIONS | 最終的二進位制可執行檔案是由編譯後生成的目標檔案與一些第三方庫連結生成的,在執行連結操作時可能會需要指定連結引數,–with-ld-opt就是用於加入連結時的引數。例如,如果我們希望將某個庫連結到Nginx程式中,需要在這裡加入–with-ld-opt=-llibraryName -LlibraryPath,其中libraryName是目標庫的名稱,libraryPath則是目標庫所在的路徑 |
–with-cpu-opt=CPU | 指定CPU處理器架構,只能從以下取值中選擇:pentium、pentiumpro、pentium3、pentium4、athlon、opteron、sparc32、sparc64、ppc64 |
–without-pcre | 如果確認Nginx不用解析正則表示式,也就是說,nginx.conf配置檔案中不會出現正則表示式,那麼可以使用這個引數 |
–with-pcre | 強制使用PCRE庫 |
–with-pcre=DIR | 指定PCRE庫的原始碼位置,在編譯Nginx時會進入該目錄編譯PCRE原始碼 |
–with-pcre-opt=OPTIONS | 編譯PCRE原始碼時希望加入的編譯選項 |
–with-pcre-jit | 編譯PCRE庫支援及時編譯 |
–with-md5=DIR | 指定SHA1庫的原始碼位置,在編譯Nginx時會進入該目錄編譯SHA1原始碼。 注意:OpenSSL中已經有了SHA1演算法的實現。如果已經安裝了OpenSSL,那麼完全可以使用OpenSSL實現的SHA1演算法 |
–with-md5-opt=OPTIONS | 編譯MD5原始碼時希望加入的編譯選項 |
–with-md5-asm | 使用MD5的彙編原始碼 |
–with-sha1=DIR | 指定SHA1庫的原始碼位置,在編譯Nginx時會進入該目錄編譯SHA1原始碼。 注意:OpenSSL中已經有了SHA1演算法的實現。如果已經安裝了OpenSSL,那麼完全可以使用OpenSSL實現的SHA1演算法 |
–with-sha1-opt=OPTIONS | 編譯SHA1原始碼時希望加入的編譯選項 |
–with-sha1-asm | 使用SHA1的彙編原始碼 |
–with-zlib=DIR | 指定zlib庫的原始碼位置,在編譯Nginx時會進入該目錄編譯zlib原始碼。如果使用了gzip壓縮功能,就需要zlib庫的支援 |
–with-zlib-opt=OPTIONS | 編譯zlib原始碼時希望加入的編譯選項 |
–with-zlib-asm=CPU | 指定對特定的CPU使用zlib庫的彙編優化功能,目前僅支援兩種架構:pentium和pentiumpro |
–with-libatomic | 強制使用atomic庫。atomic庫是CPU架構獨立的一種原子操作的實現。它支援以下體系架構:x86(包括i386和x86_64)、PPC64、Sparc64(v9或更高版本)或者安裝了GCC 4.1.0及更高版本的架構。 |
–with-libatomic=DIR | atomic庫所在的位置 |
–with-openssl=DIR | 指定OpenSSL庫的原始碼位置,在編譯Nginx時會進入該目錄編譯OpenSSL原始碼。注意:如果Web伺服器支援HTTPS,也就是SSL協議,Nginx要求必須使用OpenSSL。 |
–with-openssl-opt=OPTIONS | 編譯OpenSSL原始碼時希望加入的編譯選項 |
–with-debug | 將Nginx需要列印debug除錯級別日誌的程式碼編譯進Nginx。這樣可以在Nginx執行時通過修改配置檔案來使其列印除錯日誌,這對於研究、定位Nginx問題非常有幫助 |
配置檔案語法
nginx是模組化的系統,整個系統是分成一個個模組的。每個模組負責不同的功能。如果不用某個模組的話,也可以去掉,可以讓nginx更加輕量化。
要用的模組已經被編譯進nginx了,成為nginx的一部分了,那要怎麼用這些模組呢?那就得通過配置檔案,這跟傳統的linux服務差不多,都是通過配置檔案來改變功能。nginx的模組是通過一個叫指令(directive)的東西來用的。整個配置檔案都是由指令來控制的。nginx也有自己內建的指令,比如events, http, server, 和 location等,下面會進行詳細解釋。
如果是包管理方式安裝的,配置檔案預設在/etc/nginx/nginx.conf
;如果是原始碼安裝的,配置檔案則在configure
的時候指定的--conf-path
下。
nginx的配置檔案分為兩類。一類是主配置檔案,用來設定nginx的基本和通用配置。域名的配置檔案放在指定的目錄下,避免主配置檔案邏輯過於複雜,也方便對域名的配置檔案進行管理。
1. 配置檔案變數詳解
變數 | 解釋 |
---|---|
$remote_addr | 獲取客戶端ip |
$binary_remote_addr | 客戶端ip(二進位制) |
$remote_port | 客戶端port,如:50472 |
$remote_user | 已經經過Auth Basic Module驗證的使用者名稱 |
$host | 請求主機頭欄位,否則為伺服器名稱,如:blog.sakmon.com |
$request | 使用者請求資訊,如:GET ?a=1&b=2 HTTP/1.1 |
$request_filename | 當前請求的檔案的路徑名,由root或alias和URI request組合而成,如:/2013/81.html |
$status | 請求的響應狀態碼,如:200 |
$body_bytes_sent | 響應時送出的body位元組數數量。即使連線中斷,這個資料也是精確的,如:40 |
$content_length | 等於請求行的“Content_Length”的值 |
$content_type | 等於請求行的“Content_Type”的值 |
$http_referer | 引用地址 |
$http_user_agent | 客戶端agent資訊,如:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 |
$args | 與$query_string相同 等於當中URL的引數(GET),如a=1&b=2 |
$document_uri |
與 |
$document_root | 針對當前請求的根路徑設定值 |
$hostname | 如:centos53.localdomain |
$http_cookie | 客戶端cookie資訊 |
$cookie_COOKIE | cookie COOKIE變數的值 |
$is_args | 如果有$args引數,這個變數等於”?”,否則等於”",空值,如? |
$limit_rate | 這個變數可以限制連線速率,0表示不限速 |
$query_string | 與$args相同 等於當中URL的引數(GET),如a=1&b=2 |
$request_body | 記錄POST過來的資料資訊 |
$request_body_file | 客戶端請求主體資訊的臨時檔名 |
$request_method | 客戶端請求的動作,通常為GET或POST,如:GET |
$request_uri | 包含請求引數的原始URI,不包含主機名,如:/2013/81.html?a=1&b=2 |
$scheme | HTTP方法(如http,https),如:http |
$uri | 這個變數指當前的請求URI,不包括任何引數(見$args) 如:/2013/81.html |
$request_completion | 如果請求結束,設定為OK. 當請求未結束或如果該請求不是請求鏈串的最後一個時,為空(Empty),如:OK |
$server_protocol | 請求使用的協議,通常是HTTP/1.0或HTTP/1.1,如:HTTP/1.1 |
$server_addr | 伺服器IP地址,在完成一次系統呼叫後可以確定這個值 |
$server_name | 伺服器名稱,如:blog.sakmon.com |
$server_port | 請求到達伺服器的埠號,如:80 |
2. 主配置檔案總覽
#定義執行nginx的使用者 user nobody; #啟動程序,通常設定成和cpu的數量相等 worker_processes1; #全域性錯誤日誌及PID檔案 #日誌的級別debug info notice warn error crit alert emerg 遞增--> #error_loglogs/error.log; #error_loglogs/error.lognotice; #error_loglogs/error.loginfo; #pidlogs/nginx.pid; #工作模式及連線數上限 events { #epoll是多路複用IO(I/O Multiplexing)中的一種方式, #僅用於linux2.6以上核心,可以大大提高nginx的效能 useepoll; #單個後臺worker process程序的最大併發連結數 worker_connections1024; # 併發總數是 worker_processes 和 worker_connections 的乘積 # 即 max_clients = worker_processes * worker_connections # 在設定了反向代理的情況下,max_clients = worker_processes * worker_connections / 4為什麼 # 為什麼上面反向代理要除以4,應該說是一個經驗值 # 根據以上條件,正常情況下的Nginx Server可以應付的最大連線數為:4 * 8000 = 32000 # worker_connections 值的設定跟實體記憶體大小有關 # 因為併發受IO約束,max_clients的值須小於系統可以開啟的最大檔案數 # 而系統可以開啟的最大檔案數和記憶體大小成正比,一般1GB記憶體的機器上可以開啟的檔案數大約是10萬左右 # 我們來看看360M記憶體的VPS可以開啟的檔案控制代碼數是多少: # $ cat /proc/sys/fs/file-max # 輸出 34336 # 32000 < 34336,即併發連線總數小於系統可以開啟的檔案控制代碼總數,這樣就在作業系統可以承受的範圍之內 # 所以,worker_connections 的值需根據 worker_processes 程序數目和系統可以開啟的最大檔案總數進行適當地進行設定 # 使得併發總數小於作業系統可以開啟的最大檔案數目 # 其實質也就是根據主機的物理CPU和記憶體進行配置 # 當然,理論上的併發總數可能會和實際有所偏差,因為主機還有其他的工作程序需要消耗系統資源。 # ulimit -SHn 65535 } #負責HTTP伺服器相關屬性的配置 http { #設定mime型別,型別由mime.type檔案定義 includemime.types; default_typeapplication/octet-stream; #設定日誌格式 (預設格式) log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_loglogs/access.logmain; #sendfile 指令指定 nginx 是否呼叫 sendfile 函式(zero copy 方式)來輸出檔案, #對於普通應用,必須設為 on, #如果用來進行下載等應用磁碟IO重負載應用,可設定為 off, #以平衡磁碟與網路I/O處理速度,降低系統的uptime. sendfileon; #tcp_nopushon; #連線超時時間 #keepalive_timeout0; keepalive_timeout65; tcp_nodelayon; #包含/etc/nginx/sites-enabled下的所有以.conf結尾的配置檔案 include /etc/nginx/sites-enabled/*.conf; #包含/etc/nginx/conf.d下的所有配置檔案 include /etc/nginx/conf.d/*; #開啟gzip壓縮 gzipon; gzip_disable "MSIE [1-6]."; #設定請求緩衝 client_header_buffer_size128k; large_client_header_buffers4 128k; #負載均衡模組 weight(權重)模式預設模式 upstream project1{ #按權重將請求代理至指定服務的指定埠,weight數值越大接受的請求越多 server www.do90.cn:82 weight=2; server www.do90.com:83 weight=1; server blog.do90.cn:84 weight=5; } #負載均衡模組 ip_hash模式 upstream project2{ #按照ip的hash結果分配伺服器,該ip會固定訪問同一個後端伺服器,可以解決動態網頁存在的session共享問題 ip_hash; server www.do90.cn:port1 ; # 當前服務暫時不參加負載均衡 server www.do90.com:port1 down; # 作為預留備份機器,當其它機器都忙或者故障的時候才會啟用 server blog.do90.cn:port1 backup; # 可定義最大失敗次數和失敗時間 server www.do90.cn:port1 max_fails=3fail_timeout=20s; } #負載均衡模組 fair模式需要安裝upstream_fair模組 upstream project3{ fair; server www.do90.cn:8080; server www.do90.com:8082; } #負載均衡模組 url_hash模式需要安裝url_hash模組 upstream project4{ server 10.0.0.10:7777; server 10.0.0.11:8888; hash $request_uri; hash_method crc32; } #設定虛擬主機配置 server { #偵聽80埠 listen80; #定義使用 www.do90.cn訪問 server_namewww.do90.cn; #定義伺服器的預設網站根目錄位置 root html; #設定本虛擬主機的訪問日誌 access_loglogs/nginx.access.logmain; #預設請求 location / { #定義首頁索引檔案的名稱 index index.php index.html index.htm; } # 定義錯誤提示頁面 error_page500 502 503 504 /50x.html; location = /50x.html { } #靜態檔案,nginx自己處理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { #過期30天,靜態檔案不怎麼更新,過期可以設大一點, #如果頻繁更新,則可以設定得小一點。 expires 30d; } #PHP 指令碼請求全部轉發到 FastCGI處理. 使用FastCGI預設配置. location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; include fastcgi_params; } #禁止訪問 .htxxx 檔案 location ~ /.ht { deny all; } } }
3. 域名配置檔案
在主配置檔案中會有include
引數,include /etc/nginx/sites-enabled/*.conf;
這個資料夾中的所有以.conf
結尾的,都會被nginx作為配置檔案。下方有幾個例子。
正常html訪問
server { listen80; server_nameexample.com; indexindex.html; root/var/www; access_log /var/log/nginx/jdnn_access.log combined; error_log /var/log/nginx/jdnn_error.log warn; }
配置php請求轉發
server { listen 80; server_name m.example.com; root /var/www/; index index.html index.php; if (!-e $request_filename) { rewrite ^/(.*)/index.php/$1 last; } location ~ ^(.+\.php)(.*)$ { fastcgi_passunix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; } access_log /var/log/nginx/admin_access.log combined; error_log /var/log/nginx/admin_error.log warn; listen 443 ssl http2; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/pkgame.net/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; }
配置python後端請求轉發
server { listen80; server_namewww.example.com; location / { roothtml; indexindex.html index.htm; include uwsgi_params;#載入uWSGI配置引數 uwsgi_pass 127.0.0.1:3031;#請求轉發至”127.0.0.1:3031″埠上,即uWSGI伺服器 } access_log /var/log/nginx/www_access.log combined; error_log /var/log/nginx/www_error.log warn; }