nginx安裝、編譯參數(shù)及配置變量


目錄

安裝配置

1.使用包管理工具

在Debian、Ubuntu下

# apt-get install nginx

在RedHat 、CentOS 下

在/etc/yum.repo.d/下新建一個(gè)倉庫文件nginx.repo,添加如下內(nèi)容

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

然后直接yum安裝

# yum makecache
# yum install nginx
- 啟動(dòng)
# /etc/init.d/nginx start
- 停止
# /etc/init.d/nginx stop
- 重載配置
# /etc/init.d/nginx reload

在mac下

- 安裝
$ brew install nginx
- 啟動(dòng)
$ nginx
- 停止
$ nginx -s stop
- 重載配置
$ nginx -s reload

2. 源代碼安裝

在生產(chǎn)環(huán)境下,由于包管理安裝的nginx的方式可定義性不高,安裝的版本也是較舊的版本,不能使用最新的特性。這時(shí)候可以選擇源代碼安裝的方式,可以高度自定義。

接下來以安裝nginx的1.14.0為例

- 安裝依賴環(huán)境
# apt-get install build-essential libc6 libpcre3 libpcre3-dev libpcrecpp0 libssl0.9.8 libssl-dev zlib1g zlib1g-dev lsb-base openssl libssl-dev  libgeoip1 libgeoip-dev  google-perftools libgoogle-perftools-dev libperl-dev  libgd2-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
- 進(jìn)入目錄,生成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

上面的參數(shù)可以根據(jù)需要進(jìn)行選擇,可參照下方[編譯參數(shù)詳解](#3. 編譯參數(shù)詳解)。如果沒有特定的需求直接運(yùn)行./configure就好了。安裝完成后可以通過nginx -V查看選擇的模塊。

接下來進(jìn)行編譯安裝

# make && make install

安裝完成之后

- 啟動(dòng)nginx
# nginx
- 停止nginx
# nginx -s stop
- 重載配置
# nginx -s reload

3. 編譯參數(shù)詳解

參數(shù)選項(xiàng) 基本解釋
–help 打印幫助信息
–prefix=PATH Nginx安裝部署后的根目錄 默認(rèn)為/usr/local/nginx目錄。注意:這個(gè)目標(biāo)的設(shè)置會(huì)影響其他參數(shù)中的相對(duì)目錄。例如,如果設(shè)置了–sbin-path=sbin/nginx,那么實(shí)際上可執(zhí)行文件會(huì)被放到/usr/local/nginx/sbin/nginx中
–sbin-path=PATH 可執(zhí)行文件的放置路徑 <prefix>/sbin/nginx
–conf-path=PATH 配置文件的放置路徑 <prefix>/conf/nginx.conf
–error-log-path=PATH error日志文件的放置路徑。error日志用于定位問題,可輸出多種級(jí)別(包括debug調(diào)試級(jí)別)的日志。它的配置非常靈活,可以在nginx.conf里配置為不同請(qǐng)求的日志并輸出到不同的log文件中。這里是默認(rèn)的Nginx核心日志路徑 <prefix>/logs/error.log
–pid-path=PATH pid文件的存放路徑。這個(gè)文件里僅以ASC II碼存放著Nginx master的進(jìn)程ID,有了這個(gè)進(jìn)程ID,在使用命令行(例如nginx -s reload)通過讀取master進(jìn)程ID向master進(jìn)程發(fā)送信號(hào)時(shí),才能對(duì)運(yùn)行中的Nginx服務(wù)產(chǎn)生作用 <prefix>/logs/nginx.pid
–lock-path=PATH lock文件的放置路徑 <prefix>/logs/nginx.lock
–user=USER 指定Nginx worker進(jìn)程運(yùn)行時(shí)所屬的用戶。注意:不要將啟動(dòng)worker進(jìn)程的用戶設(shè)為root,在worker進(jìn)程出問題時(shí)master進(jìn)程要具備停止/啟動(dòng)worker進(jìn)程的能力
–group=GROUP 指定Nginx worker進(jìn)程運(yùn)行時(shí)所屬的組
–build=NAME configure執(zhí)行時(shí)與編譯期間產(chǎn)生的臨時(shí)文件名稱
–builddir=DIR configure執(zhí)行時(shí)與編譯期間產(chǎn)生的臨時(shí)文件放置的目錄,包括產(chǎn)生的Makefile、C源文件、目標(biāo)文件、可執(zhí)行文件等 <nginx source path>/objs
–with-rtsig_module 使用rtsig module處理事件驅(qū)動(dòng) 默認(rèn)情況下,Nginx是不安裝rtsig module的,即不會(huì)把rtsig module編譯進(jìn)最終的Nginx二進(jìn)制程序中
–with-select_module 使用select module處理事件驅(qū)動(dòng) select是Linux提供的一種多路復(fù)用機(jī)制,在epoll調(diào)用沒有誕生前,例如在Linux 2.4及其之前的內(nèi)核中,select用于支持服務(wù)器提供高并發(fā)連接 默認(rèn)情況下,Nginx是不安裝select module的,但如果沒有找到其他更好的事件模塊,該模塊將會(huì)被安裝
–without-select_module 不安裝select module
–with-poll_module 使用poll module處理事件驅(qū)動(dòng) poll的性能與select類似,在大量并發(fā)連接下性能都遠(yuǎn)不如epoll。默認(rèn)情況下,Nginx是不安裝poll
–without-poll_module 不安裝poll module
–with-file-aio 使用AIO方式處理事件驅(qū)動(dòng) (IO異步大幅度提升性能,需要內(nèi)核 2.6.22 以上的版本)
–with-ipv6 使Nginx支持IPv6
–with-https_ssl_module 安裝https ssl module。該模塊使Nginx支持SSL協(xié)議,提供HTTPS服務(wù)。 注意:該模塊的安裝依賴于OpenSSL開源軟件,即首先應(yīng)確保已經(jīng)在之前的參數(shù)中配置了OpenSSL需要安裝 OpenSSL library yum install openssl-devel | # apt-get install libssl-dev
–with-https_spdy_module 開啟 ngx_https_spdy_module 模塊。是Google開發(fā)的基于TCP的應(yīng)用層協(xié)議,用以最小化網(wǎng)絡(luò)延遲,提升網(wǎng)絡(luò)速度,優(yōu)化用戶的網(wǎng)絡(luò)使用體驗(yàn)。SPDY并不是一種用于替代HTTP的協(xié)議,而是對(duì)HTTP協(xié)議的增強(qiáng)
–with-https_realip_module 開啟 ngx_https_realip_module 模塊 。此模塊支持顯示真實(shí)來源IP地址,主要用于NGINX做前端負(fù)載均衡服務(wù)器使用。
–with-https_addition_module 開啟 https addtion module。該模塊可以在返回客戶端的HTTP包體頭部或者尾部增加內(nèi)容。作為一個(gè)輸出過濾器,支持不完全緩沖,分部分響應(yīng)請(qǐng)求,游戲服務(wù)器不必安裝,門戶網(wǎng)站可以安裝,有利于被搜索引擎收錄頁面信息。
–with-https_xslt_module 開啟 ngx_https_xslt_module 模塊 這個(gè)模塊可以使XML格式的數(shù)據(jù)在發(fā)給客戶端前加入XSL渲染,0.7.8后面版本才可以使用。
–with-https_image_filter_module 開啟 ngx_https_image_filter_module 模塊 。這個(gè)模塊將符合配置的圖片實(shí)時(shí)壓縮為指定大?。╳idth*height)的縮略圖再發(fā)送給用戶,目前支持JPEG、PNG、GIF格式。 注意:這個(gè)模塊依賴于開源的libgd庫,在安裝前確保操作系統(tǒng)已經(jīng)安裝了libgd,是nginx提供的集成圖片處理模塊,支持nginx-0.7.54以后的版本,在網(wǎng)站訪問量不是很高磁盤有限不想生成多余的圖片文件的前提下可,就可以用它實(shí)時(shí)縮放圖片,旋轉(zhuǎn)圖片,驗(yàn)證圖片有效性以及獲取圖片寬高以及圖片類型信息,由于是即時(shí)計(jì)算的結(jié)果,所以網(wǎng)站訪問量大的話,不建議使用。
–with-https_geoip_module 開啟 ngx_https_geoip_module 模塊,這個(gè)模塊基于客戶端的IP地址創(chuàng)建一些ngx_https_geoip_module變量,并與MaxMindGeoIP文件進(jìn)行匹配,該模塊僅用于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響應(yīng)包中將指定的字符串替換為自己需要的字符串 例如,在HTML的返回中,將</head>替換為</head><script language=”javascript” src=”$script”></script>
–with-https_dav_module 開啟 ngx_https_dav_module 模塊。這個(gè)模塊可以讓Nginx支持Webdav標(biāo)準(zhǔn),如支持Webdav協(xié)議中的PUT、DELETE、COPY、MOVE、MKCOL等請(qǐng)求 默認(rèn)情況下為關(guān)閉,需編譯開啟,如果開啟WebDAV擴(kuò)展動(dòng)作模塊,(可為文件和目錄指定權(quán)限)
–with-https_flv_module 開啟 ngx_https_flv_module 模塊 ,這個(gè)模塊可以在向客戶端返回響應(yīng)時(shí),對(duì)FLV格式的視頻文件在header頭做一些處理,使得客戶端可以觀看、拖動(dòng)FLV視頻
–with-https_mp4_module 開啟 ngx_https_mp4_module 模塊,該模塊使客戶端可以觀看、拖動(dòng)MP4視頻
–with-https_gunzip_module 開啟 ngx_https_gunzip_module 模塊,是一個(gè)過濾器, 它為不支持“gzip”編碼方法的客戶端解壓具有“Content-Encoding: gzip”頭的響應(yīng)。 當(dāng)希望存儲(chǔ)壓縮后的數(shù)據(jù)以節(jié)省空間和減少I/O開銷,又不希望對(duì)那些不支持gzip壓縮的客戶端造成不利影響時(shí), 此模塊會(huì)派上用途。
–with-https_gzip_static_module 開啟 ngx_https_gzip_static_module 模塊 ,允許發(fā)送以“.gz”作為文件擴(kuò)展名的預(yù)壓縮文件,防止文件被重復(fù)壓縮,以替代發(fā)送普通文件。如果采用gzip模塊把一些文檔進(jìn)行g(shù)zip格式壓縮后再返回給客戶端,那么對(duì)同一個(gè)文件每次都會(huì)重新壓縮,這是比較消耗服務(wù)器CPU資源的。
–with-https_auth_request_module 開啟 ngx_https_auth_request_module 模塊
–with-https_random_index_module 開啟 ngx_https_random_index_module 模塊 ,該模塊在客戶端訪問某個(gè)目錄時(shí),隨機(jī)返回該目錄下的索引文件
–with-https_secure_link_module 開啟 ngx_https_secure_link_module ,該模塊提供一種驗(yàn)證請(qǐng)求是否有效的機(jī)制。例如,它會(huì)驗(yàn)證URL中需要加入的token參數(shù)是否屬于特定客戶端發(fā)來的,以及檢查時(shí)間戳是否過期(計(jì)算和檢查要求所需的安全鏈接網(wǎng)址(防盜鏈))
–with-https_degradation_module 開啟 ngx_https_degradation_module 模塊,該模塊針對(duì)一些特殊的系統(tǒng)調(diào)用(如sbrk)做一些優(yōu)化,允許在內(nèi)存不足的情況下返回204或444碼。
–with-https_stub_status_module 開啟 ngx_https_stub_status_module 模塊,該模塊可以讓運(yùn)行中的Nginx提供性能統(tǒng)計(jì)頁面,獲取相關(guān)的并發(fā)連接、請(qǐng)求的信息
–without-https_charset_module 關(guān)閉 https charset module。這個(gè)模塊可以將服務(wù)器發(fā)出的HTTP響應(yīng)重編碼
–without-https_gzip_module 關(guān)閉 ngx_https_gzip_module模塊,在服務(wù)器發(fā)出的HTTP響應(yīng)包中,這個(gè)模塊可以按照配置文件指定的content-type對(duì)特定大小的HTTP響應(yīng)包體執(zhí)行g(shù)zip壓縮
–without-https_ssi_module 關(guān)閉 ngx_https_ssi_module模塊,該模塊可以在向用戶返回的HTTP響應(yīng)包體中加入特定的內(nèi)容,如HTML文件中固定的頁頭和頁尾
–without-https_userid_module 關(guān)閉 ngx_https_userid_module模塊,這個(gè)模塊可以通過HTTP請(qǐng)求頭部信息里的一些字段認(rèn)證用戶信息,以確定請(qǐng)求是否合法
–without-https_access_module 關(guān)閉 訪問模塊,這個(gè)模塊可以根據(jù)IP地址限制能夠訪問服務(wù)器的客戶端
–without-https_auth_basic_module 禁用基本的認(rèn)證模塊,這個(gè)模塊可以提供最簡單的用戶名/密碼認(rèn)證
–without-https_autoindex_module 禁用自動(dòng)索引模塊,該模塊提供簡單的目錄瀏覽功能
–without-https_geo_module 禁用Geo模塊,這個(gè)模塊可以定義一些變量,這些變量的值將與客戶端IP地址關(guān)聯(lián),這樣Nginx針對(duì)不同的地區(qū)的客戶端(根據(jù)IP地址判斷)返回不一樣的結(jié)果,例如不同地區(qū)顯示不同語言的網(wǎng)頁
–without-https_map_module 禁用Map模塊,這個(gè)模塊可以建立一個(gè)key/value映射表,不同的key得到相應(yīng)的value,這樣可以針對(duì)不同的URL做特殊處理。例如,返回302重定向響應(yīng)時(shí),可以期望URL不同時(shí)返回的Location字段也不一樣
–without-https_split_clients_module 切割客戶端IP,該模塊會(huì)根據(jù)客戶端的信息,例如IP地址、header頭、cookie等,來區(qū)分處理,nginx 的 Split Clients(切割客戶端IP)的作用是使用 MurmurHash2 哈希算法對(duì)客戶端的IP進(jìn)行運(yùn)算,得到一個(gè)32位的整數(shù),這個(gè)數(shù)值范圍從 0~4294967296,匹配不同的區(qū)間位置,得到不同的值賦予某個(gè)變量。最后根據(jù)這變量的不同,作不同的邏輯處理。
–without-https_referer_module 該模塊可以根據(jù)請(qǐng)求中的referer字段來拒絕請(qǐng)求
–without-https_rewrite_module 禁用Rewrite模塊,該模塊提供HTTP請(qǐng)求在Nginx服務(wù)內(nèi)部的重定向功能,依賴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服務(wù)讀取數(shù)據(jù),并簡單地適配成HTTP響應(yīng)返回給客戶端
–without-https_limit_conn_module 禁用limit_conn_zone模塊,該模塊針對(duì)某個(gè)IP地址限制并發(fā)連接數(shù)。例如,使Nginx對(duì)一個(gè)IP地址僅允許一個(gè)連接。
–without-https_limit_req_module 禁用Limit Requests模塊。該模塊針對(duì)某個(gè)IP地址限制并發(fā)請(qǐng)求數(shù)
–without-https_empty_gif_module 禁用Empty Gif模塊。該模塊可以使得Nginx在收到無效請(qǐng)求時(shí),立刻返回內(nèi)存中的1×1像素的GIF圖片。這種好處在于,對(duì)于明顯的無效請(qǐng)求不會(huì)去試圖浪費(fèi)服務(wù)器資源
–without-https_browser_module 禁用Browser 模塊。該模塊會(huì)根據(jù)HTTP請(qǐng)求中的user-agent字段(該字段通常由瀏覽器填寫)來識(shí)別瀏覽器
–without-https_upstream_hash_module 禁用Upstream模塊。該模塊用于配置負(fù)載均衡結(jié)構(gòu)
–without-https_upstream_ip_hash_module 禁用Upstream模塊 該模塊提供當(dāng)Nginx與后端server建立連接時(shí),會(huì)根據(jù)IP做散列運(yùn)算來決定與后端哪臺(tái)server通信,這樣可以實(shí)現(xiàn)負(fù)載均衡
–without-https_upstream_least_conn_module 禁用Upstream模塊 中的 least 負(fù)載均衡算法
–without-https_upstream_keepalive_module 禁用Upstream模塊 中的 keepalive 負(fù)載均衡算法
–with-https_perl_module 需要安裝 perl # yum install perl-ExtUtils-Embed | # apt-get install libperl-dev
–with-perl_modules_path=PATH perl module放置的路徑。只有使用了第三方的perl module,才需要配置這個(gè)路徑
–with-perl=PATH perl binary放置的路徑。如果配置的Nginx會(huì)執(zhí)行Perl腳本,那么就必須要設(shè)置此路徑
–https-log-path=PATH access日志放置的位置。每個(gè)HTTP請(qǐng)求到結(jié)束時(shí)都會(huì)記錄 <prefix>/logs/access.log
–https-client-body-temp-path=PATH 處理HTTP請(qǐng)求時(shí)如果請(qǐng)求的包體需要暫時(shí)存放到臨時(shí)磁盤文件中,則把這樣的臨時(shí)文件放置到該路徑下 <prefix>/client_body_temp
–https-proxy-temp-path=PATH Nginx作為HTTP反向代理服務(wù)器時(shí),上游服務(wù)器產(chǎn)生的HTTP包體在需要臨時(shí)存放到磁盤文件時(shí),這樣的臨時(shí)文件將放到該路徑下 <prefix>/proxy_temp
–https-fastcgi-temp-path=PATH Fastcgi所使用臨時(shí)文件的放置目錄 <prefix>/fastcgi_temp
–https-uwsgi-temp-path=PATH uWSGI所使用臨時(shí)文件的放置目錄 <prefix>/uwsgi_temp
–https-scgi-temp-path=PATH SCGI所使用臨時(shí)文件的放置目錄 <prefix>/scgi_temp
–without-https 禁用HTTP服務(wù)
–without-https-cache 禁用HTTP 緩沖功能
–with-mail 開啟郵件服務(wù)代理(mail server proxy)模塊,支 持POP3, IMAP4和SMTP。該功能默認(rèn)禁用
–with-mail_ssl_module 開啟郵件代理服務(wù)對(duì)SSL的支持。該功能默認(rèn)禁用
–without-mail_pop3_module 在郵件代理下禁用POP3功能。在開啟郵件代理模塊后該功能默認(rèn)啟用
–without-mail_imap_module 對(duì)郵件代理服務(wù)器禁用IMAP4模塊,在開啟郵件代理模塊后該功能默認(rèn)啟用
–without-mail_smtp_module 對(duì)于郵件代理服務(wù)器禁用SMTP模塊,在開啟郵件代理模塊后該功能默認(rèn)啟用
–with-google_perftools_module Google的針對(duì)nginx性能調(diào)優(yōu)的工具,需要安裝:yum install gperftools gperftools-devel
–with-cpp_test_module C預(yù)編譯器測試模塊
–add-module=PATH 當(dāng)在Nginx里加入第三方模塊時(shí),通過這個(gè)參數(shù)指定第三方模塊的路徑
–with-cc=PATH C編譯器的路徑
–with-cpp=PATH C預(yù)編譯器的路徑
–with-cc-opt=OPTIONS 如果希望在Nginx編譯期間指定加入一些編譯選項(xiàng),如指定宏或者使用-I加入某些需要包含的目錄,這時(shí)可以使用該參數(shù)達(dá)成目的
–with-ld-opt=OPTIONS 最終的二進(jìn)制可執(zhí)行文件是由編譯后生成的目標(biāo)文件與一些第三方庫鏈接生成的,在執(zhí)行鏈接操作時(shí)可能會(huì)需要指定鏈接參數(shù),–with-ld-opt就是用于加入鏈接時(shí)的參數(shù)。例如,如果我們希望將某個(gè)庫鏈接到Nginx程序中,需要在這里加入–with-ld-opt=-llibraryName -LlibraryPath,其中l(wèi)ibraryName是目標(biāo)庫的名稱,libraryPath則是目標(biāo)庫所在的路徑
–with-cpu-opt=CPU 指定CPU處理器架構(gòu),只能從以下取值中選擇:pentium、pentiumpro、pentium3、pentium4、athlon、opteron、sparc32、sparc64、ppc64
–without-pcre 如果確認(rèn)Nginx不用解析正則表達(dá)式,也就是說,nginx.conf配置文件中不會(huì)出現(xiàn)正則表達(dá)式,那么可以使用這個(gè)參數(shù)
–with-pcre 強(qiáng)制使用PCRE庫
–with-pcre=DIR 指定PCRE庫的源碼位置,在編譯Nginx時(shí)會(huì)進(jìn)入該目錄編譯PCRE源碼
–with-pcre-opt=OPTIONS 編譯PCRE源碼時(shí)希望加入的編譯選項(xiàng)
–with-pcre-jit 編譯PCRE庫支持及時(shí)編譯
–with-md5=DIR 指定SHA1庫的源碼位置,在編譯Nginx時(shí)會(huì)進(jìn)入該目錄編譯SHA1源碼。 注意:OpenSSL中已經(jīng)有了SHA1算法的實(shí)現(xiàn)。如果已經(jīng)安裝了OpenSSL,那么完全可以使用OpenSSL實(shí)現(xiàn)的SHA1算法
–with-md5-opt=OPTIONS 編譯MD5源碼時(shí)希望加入的編譯選項(xiàng)
–with-md5-asm 使用MD5的匯編源碼
–with-sha1=DIR 指定SHA1庫的源碼位置,在編譯Nginx時(shí)會(huì)進(jìn)入該目錄編譯SHA1源碼。 注意:OpenSSL中已經(jīng)有了SHA1算法的實(shí)現(xiàn)。如果已經(jīng)安裝了OpenSSL,那么完全可以使用OpenSSL實(shí)現(xiàn)的SHA1算法
–with-sha1-opt=OPTIONS 編譯SHA1源碼時(shí)希望加入的編譯選項(xiàng)
–with-sha1-asm 使用SHA1的匯編源碼
–with-zlib=DIR 指定zlib庫的源碼位置,在編譯Nginx時(shí)會(huì)進(jìn)入該目錄編譯zlib源碼。如果使用了gzip壓縮功能,就需要zlib庫的支持
–with-zlib-opt=OPTIONS 編譯zlib源碼時(shí)希望加入的編譯選項(xiàng)
–with-zlib-asm=CPU 指定對(duì)特定的CPU使用zlib庫的匯編優(yōu)化功能,目前僅支持兩種架構(gòu):pentium和pentiumpro
–with-libatomic 強(qiáng)制使用atomic庫。atomic庫是CPU架構(gòu)獨(dú)立的一種原子操作的實(shí)現(xiàn)。它支持以下體系架構(gòu):x86(包括i386和x86_64)、PPC64、Sparc64(v9或更高版本)或者安裝了GCC 4.1.0及更高版本的架構(gòu)。
–with-libatomic=DIR atomic庫所在的位置
–with-openssl=DIR 指定OpenSSL庫的源碼位置,在編譯Nginx時(shí)會(huì)進(jìn)入該目錄編譯OpenSSL源碼。注意:如果Web服務(wù)器支持HTTPS,也就是SSL協(xié)議,Nginx要求必須使用OpenSSL。
–with-openssl-opt=OPTIONS 編譯OpenSSL源碼時(shí)希望加入的編譯選項(xiàng)
–with-debug 將Nginx需要打印debug調(diào)試級(jí)別日志的代碼編譯進(jìn)Nginx。這樣可以在Nginx運(yùn)行時(shí)通過修改配置文件來使其打印調(diào)試日志,這對(duì)于研究、定位Nginx問題非常有幫助

配置文件語法

nginx是模塊化的系統(tǒng),整個(gè)系統(tǒng)是分成一個(gè)個(gè)模塊的。每個(gè)模塊負(fù)責(zé)不同的功能。如果不用某個(gè)模塊的話,也可以去掉,可以讓nginx更加輕量化。

要用的模塊已經(jīng)被編譯進(jìn)nginx了,成為nginx的一部分了,那要怎么用這些模塊呢?那就得通過配置文件,這跟傳統(tǒng)的linux服務(wù)差不多,都是通過配置文件來改變功能。nginx的模塊是通過一個(gè)叫指令(directive)的東西來用的。整個(gè)配置文件都是由指令來控制的。nginx也有自己內(nèi)置的指令,比如events, http, server, 和 location等,下面會(huì)進(jìn)行詳細(xì)解釋。

如果是包管理方式安裝的,配置文件默認(rèn)在/etc/nginx/nginx.conf;如果是源碼安裝的,配置文件則在configure的時(shí)候指定的--conf-path下。

nginx的配置文件分為兩類。一類是主配置文件,用來設(shè)定nginx的基本和通用配置。域名的配置文件放在指定的目錄下,避免主配置文件邏輯過于復(fù)雜,也方便對(duì)域名的配置文件進(jìn)行管理。

1. 配置文件變量詳解

變量 解釋
$remote_addr 獲取客戶端ip
$binary_remote_addr 客戶端ip(二進(jìn)制)
$remote_port 客戶端port,如:50472
$remote_user 已經(jīng)經(jīng)過Auth Basic Module驗(yàn)證的用戶名
$host 請(qǐng)求主機(jī)頭字段,否則為服務(wù)器名稱,如:blog.sakmon.com
$request 用戶請(qǐng)求信息,如:GET ?a=1&b=2 HTTP/1.1
$request_filename 當(dāng)前請(qǐng)求的文件的路徑名,由root或alias和URI request組合而成,如:/2013/81.html
$status 請(qǐng)求的響應(yīng)狀態(tài)碼,如:200
$body_bytes_sent 響應(yīng)時(shí)送出的body字節(jié)數(shù)數(shù)量。即使連接中斷,這個(gè)數(shù)據(jù)也是精確的,如:40
$content_length 等于請(qǐng)求行的“Content_Length”的值
$content_type 等于請(qǐng)求行的“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相同 等于當(dāng)中URL的參數(shù)(GET),如a=1&b=2
$document_uri uri相同 這個(gè)變量指當(dāng)前的請(qǐng)求URI,不包括任何參數(shù)(見args) 如:/2013/81.html
$document_root 針對(duì)當(dāng)前請(qǐng)求的根路徑設(shè)置值
$hostname 如:centos53.localdomain
$http_cookie 客戶端cookie信息
$cookie_COOKIE cookie COOKIE變量的值
$is_args 如果有$args參數(shù),這個(gè)變量等于”?”,否則等于”",空值,如?
$limit_rate 這個(gè)變量可以限制連接速率,0表示不限速
$query_string 與$args相同 等于當(dāng)中URL的參數(shù)(GET),如a=1&b=2
$request_body 記錄POST過來的數(shù)據(jù)信息
$request_body_file 客戶端請(qǐng)求主體信息的臨時(shí)文件名
$request_method 客戶端請(qǐng)求的動(dòng)作,通常為GET或POST,如:GET
$request_uri 包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名,如:/2013/81.html?a=1&b=2
$scheme HTTP方法(如http,https),如:http
$uri 這個(gè)變量指當(dāng)前的請(qǐng)求URI,不包括任何參數(shù)(見$args) 如:/2013/81.html
$request_completion 如果請(qǐng)求結(jié)束,設(shè)置為OK. 當(dāng)請(qǐng)求未結(jié)束或如果該請(qǐng)求不是請(qǐng)求鏈串的最后一個(gè)時(shí),為空(Empty),如:OK
$server_protocol 請(qǐng)求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1,如:HTTP/1.1
$server_addr 服務(wù)器IP地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值
$server_name 服務(wù)器名稱,如:blog.sakmon.com
$server_port 請(qǐng)求到達(dá)服務(wù)器的端口號(hào),如:80

2. 主配置文件總覽

#定義運(yùn)行nginx的用戶
user nobody;
#啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等
worker_processes  1;
 
#全局錯(cuò)誤日志及PID文件
#日志的級(jí)別debug info notice warn error crit alert emerg 遞增-->
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
#工作模式及連接數(shù)上限
events {
    #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,
    #僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能
    use   epoll; 
 
    #單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù)    
    worker_connections  1024;
 
    # 并發(fā)總數(shù)是 worker_processes 和 worker_connections 的乘積
    # 即 max_clients = worker_processes * worker_connections
    # 在設(shè)置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4  為什么
    # 為什么上面反向代理要除以4,應(yīng)該說是一個(gè)經(jīng)驗(yàn)值
    # 根據(jù)以上條件,正常情況下的Nginx Server可以應(yīng)付的最大連接數(shù)為:4 * 8000 = 32000
    # worker_connections 值的設(shè)置跟物理內(nèi)存大小有關(guān)
    # 因?yàn)椴l(fā)受IO約束,max_clients的值須小于系統(tǒng)可以打開的最大文件數(shù)
    # 而系統(tǒng)可以打開的最大文件數(shù)和內(nèi)存大小成正比,一般1GB內(nèi)存的機(jī)器上可以打開的文件數(shù)大約是10萬左右
    # 我們來看看360M內(nèi)存的VPS可以打開的文件句柄數(shù)是多少:
    # $ cat /proc/sys/fs/file-max
    # 輸出 34336
    # 32000 < 34336,即并發(fā)連接總數(shù)小于系統(tǒng)可以打開的文件句柄總數(shù),這樣就在操作系統(tǒng)可以承受的范圍之內(nèi)
    # 所以,worker_connections 的值需根據(jù) worker_processes 進(jìn)程數(shù)目和系統(tǒng)可以打開的最大文件總數(shù)進(jìn)行適當(dāng)?shù)剡M(jìn)行設(shè)置
    # 使得并發(fā)總數(shù)小于操作系統(tǒng)可以打開的最大文件數(shù)目
    # 其實(shí)質(zhì)也就是根據(jù)主機(jī)的物理CPU和內(nèi)存進(jìn)行配置
    # 當(dāng)然,理論上的并發(fā)總數(shù)可能會(huì)和實(shí)際有所偏差,因?yàn)橹鳈C(jī)還有其他的工作進(jìn)程需要消耗系統(tǒng)資源。
    # ulimit -SHn 65535
 
}
 
#負(fù)責(zé)HTTP服務(wù)器相關(guān)屬性的配置 
http {
    #設(shè)定mime類型,類型由mime.type文件定義
    include    mime.types;
    default_type  application/octet-stream;
    #設(shè)定日志格式
    (默認(rèn)格式)
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  logs/access.log  main;
 
    #sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來輸出文件,
    #對(duì)于普通應(yīng)用,必須設(shè)為 on,
    #如果用來進(jìn)行下載等應(yīng)用磁盤IO重負(fù)載應(yīng)用,可設(shè)置為 off,
    #以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
    sendfile     on;
    #tcp_nopush     on;
 
    #連接超時(shí)時(shí)間
    #keepalive_timeout  0;
    keepalive_timeout  65;
    tcp_nodelay     on;
    #包含/etc/nginx/sites-enabled下的所有以.conf結(jié)尾的配置文件
    include /etc/nginx/sites-enabled/*.conf;
    #包含/etc/nginx/conf.d下的所有配置文件
    include /etc/nginx/conf.d/*;
    #開啟gzip壓縮
    gzip  on;
    gzip_disable "MSIE [1-6].";
 
    #設(shè)定請(qǐng)求緩沖
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;
 
    #負(fù)載均衡模塊 weight(權(quán)重)模式  默認(rèn)模式
    upstream project1{
        #按權(quán)重將請(qǐng)求代理至指定服務(wù)的指定端口,weight數(shù)值越大接受的請(qǐng)求越多
        server www.do90.cn:82 weight=2;
        server www.do90.com:83 weight=1;
        server blog.do90.cn:84 weight=5;
    }

    #負(fù)載均衡模塊 ip_hash模式
    upstream project2{
        #按照ip的hash結(jié)果分配服務(wù)器,該ip會(huì)固定訪問同一個(gè)后端服務(wù)器,可以解決動(dòng)態(tài)網(wǎng)頁存在的session共享問題
        ip_hash;
        server www.do90.cn:port1 ;
        # 當(dāng)前服務(wù)暫時(shí)不參加負(fù)載均衡
        server www.do90.com:port1 down;
        # 作為預(yù)留備份機(jī)器,當(dāng)其它機(jī)器都忙或者故障的時(shí)候才會(huì)啟用
        server blog.do90.cn:port1 backup;
        # 可定義最大失敗次數(shù)和失敗時(shí)間
        server www.do90.cn:port1 max_fails=3  fail_timeout=20s;       
    }

    #負(fù)載均衡模塊 fair模式  需要安裝upstream_fair模塊
    upstream project3{
        fair;
        server www.do90.cn:8080;
        server www.do90.com:8082;
    }

    #負(fù)載均衡模塊 url_hash模式  需要安裝url_hash模塊
    upstream project4{
        server 10.0.0.10:7777;
        server 10.0.0.11:8888;
        hash $request_uri;
        hash_method crc32;
    }

    #設(shè)定虛擬主機(jī)配置
    server {
        #偵聽80端口
        listen    80;
        #定義使用 www.do90.cn訪問
        server_name  www.do90.cn;
 
        #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
        root html;
 
        #設(shè)定本虛擬主機(jī)的訪問日志
        access_log  logs/nginx.access.log  main;
 
        #默認(rèn)請(qǐng)求
        location / {
            
            #定義首頁索引文件的名稱
            index index.php index.html index.htm;   
 
        }
 
        # 定義錯(cuò)誤提示頁面
        error_page   500 502 503 504 /50x.html;
        location = /50x.html {
        }
 
        #靜態(tài)文件,nginx自己處理
        location ~ ^/(images|javascript|js|css|flash|media|static)/ {
            
            #過期30天,靜態(tài)文件不怎么更新,過期可以設(shè)大一點(diǎn),
            #如果頻繁更新,則可以設(shè)置得小一點(diǎn)。
            expires 30d;
        }
 
        #PHP 腳本請(qǐng)求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認(rèn)配置.
        location ~ .php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
 
        #禁止訪問 .htxxx 文件
            location ~ /.ht {
            deny all;
        }
 
    }
}

3. 域名配置文件

在主配置文件中會(huì)有include參數(shù),include /etc/nginx/sites-enabled/*.conf;這個(gè)文件夾中的所有以.conf結(jié)尾的,都會(huì)被nginx作為配置文件。下方有幾個(gè)例子。

正常html訪問

server
    {
            listen    80;
            server_name  example.com;
              index   index.html;
              root  /var/www;
          access_log /var/log/nginx/jdnn_access.log combined;
          error_log /var/log/nginx/jdnn_error.log warn;
}

配置php請(qǐng)求轉(zhuǎn)發(fā)

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_pass  unix:/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后端請(qǐng)求轉(zhuǎn)發(fā)

server {  
        listen       80;  
        server_name  www.example.com;
        location / {  
        root   html;
        index  index.html index.htm;
        include uwsgi_params;#加載uWSGI配置參數(shù)
        uwsgi_pass 127.0.0.1:3031;#請(qǐng)求轉(zhuǎn)發(fā)至”127.0.0.1:3031″端口上,即uWSGI服務(wù)器
               }  
    access_log /var/log/nginx/www_access.log combined;
    error_log /var/log/nginx/www_error.log warn;

        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容