Nginx官網:http://nginx.org/en/download.html。網頁提供了Nginx三種版本下載:開發版(Mainline Version)、穩定版(Stable Version)和過時版(Legacy Version)。Nignx提供Linux和Windows版本,這裏使用的是Linux版本。此外,http://nginx.org/download/提供了全部版本的Nginx下載。html
Nginx源碼的編譯須要GCC編譯器:nginx
# gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
截止2017年10月15日,Nginx最新穩定版爲1.12.2,下載並解壓:正則表達式
# mkdir nginx-download
# cd nginx-download/
# wget http://nginx.org/download/nginx-1.12.2.tar.gz
# tar -zxvf nginx-1.12.2.tar.gz
# cd nginx-1.12.2
# ll
total 732
drwxr-xr-x 8 1001 1001 4096 Oct 17 21:16 ./
drwxr-xr-x 3 root root 4096 Oct 26 14:05 ../
-rw-r--r-- 1 1001 1001 278202 Oct 17 21:16 CHANGES
-rw-r--r-- 1 1001 1001 423948 Oct 17 21:16 CHANGES.ru
-rw-r--r-- 1 1001 1001 1397 Oct 17 21:16 LICENSE
-rw-r--r-- 1 1001 1001 49 Oct 17 21:16 README
drwxr-xr-x 6 1001 1001 4096 Oct 26 14:05 auto/
drwxr-xr-x 2 1001 1001 4096 Oct 26 14:05 conf/
-rwxr-xr-x 1 1001 1001 2481 Oct 17 21:16 configure*
drwxr-xr-x 4 1001 1001 4096 Oct 26 14:05 contrib/
drwxr-xr-x 2 1001 1001 4096 Oct 26 14:05 html/
drwxr-xr-x 2 1001 1001 4096 Oct 26 14:05 man/
drwxr-xr-x 9 1001 1001 4096 Oct 26 14:05 src/
src目錄下存放了Nginx的源代碼;數據庫
man目錄下存放了Nginx的幫助文檔;ubuntu
html目錄存放了兩個HTML文件,分別爲Nginx歡迎頁和異常頁面;瀏覽器
logs目錄用於存放Nginx運行日誌;服務器
auto目錄存放了大量的腳本文件,和configure腳本有關;cookie
configure文件爲Nginx的自動腳本程序。網絡
在解壓路徑下,運行命令./configure --prefix=/nginx(configure腳本支持的選項可參考附錄)配置Nginx的安裝目錄並生成Makefile文件:負載均衡
# ./configure --prefix=/nginx
...
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
nginx path prefix: "/nginx"
nginx binary file: "/nginx/sbin/nginx"
nginx modules path: "/nginx/modules"
nginx configuration prefix: "/nginx/conf"
nginx configuration file: "/nginx/conf/nginx.conf"
nginx pid file: "/nginx/logs/nginx.pid"
nginx error log file: "/nginx/logs/error.log"
nginx http access log file: "/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
過程當中可能出現一些依賴庫缺失問題,可參考下面的常見問題。生成了Makefile文件後,使用make命令進行編譯:
# make
make -f objs/Makefile
make[1]: Entering directory '/temp/nginx-download/nginx-1.12.2'
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs \
...
objs/src/http/modules/ngx_http_upstream_keepalive_module.o \
objs/src/http/modules/ngx_http_upstream_zone_module.o \
objs/ngx_modules.o \
-ldl -lpthread -lcrypt -lpcre -lz \
-Wl,-E
sed -e "s|%%PREFIX%%|/nginx|" \
-e "s|%%PID_PATH%%|/nginx/logs/nginx.pid|" \
-e "s|%%CONF_PATH%%|/nginx/conf/nginx.conf|" \
-e "s|%%ERROR_LOG_PATH%%|/nginx/logs/error.log|" \
< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory '/temp/nginx-download/nginx-1.12.2'
編譯順利完成後,接着使用make install命令進行安裝:
# make install
make -f objs/Makefile install
make[1]: Entering directory '/temp/nginx-download/nginx-1.12.2'
test -d '/nginx' || mkdir -p '/nginx'
test -d '/nginx/sbin' \
|| mkdir -p '/nginx/sbin'
...
test -d '/nginx/logs' \
|| mkdir -p '/nginx/logs'
make[1]: Leaving directory '/temp/nginx-download/nginx-1.12.2'
將目錄切換到/nginx下,並查看:
# cd /nginx/
# ll
total 24
drwxr-xr-x 6 root root 4096 Oct 26 14:30 ./
drwxr-xr-x 26 root root 4096 Oct 26 14:30 ../
drwxr-xr-x 2 root root 4096 Oct 26 14:30 conf/
drwxr-xr-x 2 root root 4096 Oct 26 14:30 html/
drwxr-xr-x 2 root root 4096 Oct 26 14:30 logs/
drwxr-xr-x 2 root root 4096 Oct 26 14:30 sbin/
# ls *
conf:
fastcgi.conf koi-win scgi_params
fastcgi.conf.default mime.types scgi_params.default
fastcgi_params mime.types.default uwsgi_params
fastcgi_params.default nginx.conf uwsgi_params.default
koi-utf nginx.conf.default win-utf
html:
50x.html index.html
logs:
sbin:
nginx
nginx命令所支持的選項有:
# ./sbin/nginx -h
nginx version: nginx/1.12.2
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /nginx/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
-v選項用來顯示Nginx服務器的版本號,-V選項除了顯示版本號,還顯示其編譯狀況:
# ./sbin/nginx -v
nginx version: nginx/1.12.2
# ./sbin/nginx -V
nginx version: nginx/1.12.2
built by gcc 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
configure arguments: --prefix=/nginx
-t選項用於檢查Nginx服務器配置文件是否有語法錯誤:
# ./sbin/nginx -t
nginx: the configuration file /nginx/conf/nginx.conf syntax is ok
nginx: configuration file /nginx/conf/nginx.conf test is successful
等。
啓動Nginx服務器很簡單,只須要運行sbin下的nginx腳本就好了:
# ./sbin/nginx
# ps -ef|grep nginx
root 74808 1308 0 14:47 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 74809 74808 0 14:47 ? 00:00:00 nginx: worker process
root 74811 71675 0 14:47 pts/4 00:00:00 grep --color=auto nginx
可看到Nginx已經啓動,包含了一個主進程(master process)和一個工做進程(worker process),主進程號爲74808。啓動Nginx服務後,也能夠經過查看logs目錄下的nginx.pid來查看主進程號:
# cat logs/nginx.pid
74808
Nginx的默認端口號爲80,在瀏覽器中輸入localhost/index.html查看是否啓動成功:
中止Nginx服務可分爲兩種類型:
1.快速中止:當即中止當前Nginx服務正在處理的全部網絡請求,立刻丟棄鏈接,中止工做。相關命令爲:kill -TERM 進程號或者kill -INT 進程號;
2.平緩中止:容許Nginx服務將當前的網絡請求處理完畢,但再也不接受新請求,以後關閉鏈接,中止工做。相關的命令爲:kill -QUIT 進程號;
中止Nginx服務,採用快速中止方式:
# kill -TERM 74808
# ps -ef|grep nginx
root 74998 71675 0 15:03 pts/4 00:00:00 grep --color=auto nginx
Nginx重啓採用平滑重啓的方式。Nginx服務進程號接收到重啓信號後,先讀取新的Nginx配置文件,若是配置語法正確,則啓動新的Nginx服務,而後平緩的關閉舊的服務。若是配置語法錯誤,則繼續採用舊的Nginx進程提供服務。
有兩種方式進行平滑重啓:
1.檢查配置文件是否正確,若是正確進行重啓:
# ./sbin/nginx -t
nginx: the configuration file /nginx/conf/nginx.conf syntax is ok
nginx: configuration file /nginx/conf/nginx.conf test is successful
# ./sbin/nginx -s reload
2.kill -HUP 主進程號:
# cat logs/nginx.pid
75011
# kill -HUP 75011
缺乏PCRE依賴庫
解決辦法:
sudo apt-get install libpcre3 libpcre3-dev
缺乏zlib依賴庫
./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using –without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using –with-zlib=option.
解決辦法:
sudo apt-get install zlib1g-dev
apt-get命令被佔用
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
解決辦法:找到佔用進程,而後kill:
ps -A|grep apt
61213 ? 00:00:02 aptd
kill -9 61213
注:因爲渲染緣由–實際爲 --,如–prefix=…實際爲 --prefix=...
用法 | 默認值 | |
---|---|---|
–prefix=… | 指定安裝Nginx的基礎目錄 | /usr/local/nginx, 注意:若是你在配置時使用了相對路徑,則鏈接到基礎目錄。示例:指定–conf-path=conf/nginx.conf 則配置文件會在目錄:/usr/local/nginx/conf/nginx.conf |
–sbin-path=… | Nginx二進制文件安裝的路徑 | <prefix>/sbin/nginx |
–conf-path=… | 主要配置文件放置目錄 | <prefix>/conf/nginx.conf |
–error-log-path=… | 錯誤日誌存放的路徑。錯誤日誌在配置文件中須配置得很是正確,該路徑只應用於你在配置文件中沒有指定任何錯誤的日誌指令時 | <prefix>/logs/error.log |
–pid-path=… | 指定Nginx的pid文件的路徑。能夠在配置文件中指定pid文件的路徑,若是沒有具體的指定,則使用在這裏對該選項指定的該路徑 | <prefix>/logs/nginx.pid注意:該pid文件是一個簡單的文件文件,它包含進程的標識符。該文件應該放置在一個清晰可見的位置,以便其餘應用程序可以很容易找到運行該程序的pid |
–lock-path=… | 鎖文件(lock file)的存放路徑。一樣,該文件也能夠在配置文件中指定,可是,若是在配置文件中沒有指定,則使用該值 | <prefix>/logs/nginx.lock注意:鎖文件容許其餘應用程序肯定是否一個程序在運行,就Nginx來講,它用於肯定該進程沒有被啓動兩次 |
–with-perl_modules_path=… | 定義Perl模塊的路徑。若是須要包含另外的Perl模塊,必須定義該參數 | |
–with-perl=… | Perl二進制文件的路徑。用於執行Perl腳本。若是想執行一個Perl腳本,必須設置該路徑 | |
–http-log-path=… | 定義被訪問文件的日誌文件存放路徑。該路徑只用於在配置文件中沒有定義訪問日誌的狀況 | <prefix>/logs/access.log |
–http-client-body-temp-path=… | 該目錄用於存儲客戶端請求產生的臨時文件 | <prefix>/client_body_temp |
–http-proxy-temp-path=… | 該目錄用於代理存儲臨時文件 | <prefix>/proxy_temp |
–http-fastcgi-temp-path=… | 指定用於HTTP FastCGI模塊使用的臨時文件的存放路徑 | <prefix>/fastcgi_temp |
–builddir=… | 指定建立應用程序的位置 |
編譯選項 | |
---|---|
–with-cc=… | 指定一個備用的C編譯器的位置 |
–with-cpp=… | 指定一個備用的C預處理器的位置 |
–with-cc-opt=… | 定義額外的選項,而後在命令行傳遞給C編譯器 |
–with-ld-opt=… | 定義額外的選項,而後在命令行傳遞給C鏈接器 |
–with-cpu-opt=… | 指定不一樣的目標處理器結構,能夠是下列值:pentium,pentiumpro,pentium3,pentium4,athlon,opteron,sparc32,sparc64和ppc64 |
PCRE選項 | |
–without-pcre | 不使用PCRE庫。這個設置不推薦使用,由於它會移除對正則表達式的支持,從而使Rewrite模塊失去做用。 |
–with-pcre | 強制做用PCRE庫 |
–with-pcre=… | 容許指定PCRE庫的源代碼 |
–with-pcre-opt=… | 用於創建PCRE庫的另外的選項 |
MD5選項 | |
–with-md5=… | 指定MD5庫源代碼的路徑 |
–with-md5-opt=… | 用於創建MD5庫的另外選項 |
–with-md5-asm | 爲建MD5庫使用匯編語言源代碼 |
SHA1選項 | |
–with-sha1=… | 指定SHA1庫的源代碼 |
–with-sha1-opt=… | 用於創建SHA1庫的另外選項 |
–with-sha1-asm | 爲創建SHA1庫使用匯編語言源代碼 |
zlib選項 | |
–with-zlib=… | 指定zlib庫的源代碼 |
–with-zlib-opt=… | 用於創建zlib庫的另外的選項 |
–with-zlib-asm=… | 使用匯編語言最大限度地優化下列目標結構:Pentium, pentiumpro |
OpenSSL選項 | |
–with-openssl=… | 指定OpenSSL庫的源代碼路徑 |
–with-openssl-opt=… | 爲創建OpenSSL庫的另外的選項 |
如下是Nginx默認開啓的模塊,可使用表格中的命令來關閉相應模塊:
默認開啓的模塊 | 描述 |
---|---|
–without-http-charset_module | 禁用Charset模塊,該模塊用於對網頁從新編碼 |
–without-http-gzip_module | 禁用Gzip壓縮模塊 |
–without-http_ssi_module | 禁用服務器端包含模塊 |
–without-http_access_module | 禁用訪問模塊,對於指定的IP段,容許訪問配置 |
–without-http_userid_module | 禁用用戶ID模塊。該模塊爲用戶經過cookie驗證身份 |
–without-http_auth_basic_module | 禁用基本的認證模塊 |
–without-http_autoindex_module | 禁用自動索引模塊 |
–without-http_geo_module | 禁用Geo模塊,該模塊容許你定義依賴於IP地址段的變量 |
–without-http_map_module | 禁用Map模塊,該模塊容許你聲明map區段 |
–without-http_referer_module | 禁用Referer控制模塊 |
–without-http_rewrite_module | 禁用Rewrite模塊 |
–without-http_proxy_module | 禁用代理模塊。該模塊用於向其餘服務器傳輸請求 |
–without-http_fastcgi_module | 禁用FastCGI模塊。該模塊是用於與FastCGI進程配合工做 |
–without-http_memcached_module | 禁用Memcached模塊。該模塊是用於與memcached守護進程配合工做 |
–without-http_limit_zone_module | 禁用Limit Zone模塊。該模塊是用於根據定義的zone來限制約束對資源的使用。 |
–without-http_limit_req_module | 禁用Limit Requests模塊。該模塊容許你限制每一個用戶請求的總數 |
–without-http_empty_gif_module | 禁用Empty Gif模塊。該模塊用於在內存中提供一個空白的GIF圖像 |
–without-http_browser_module | 禁用Browser模塊。該模塊用於解釋用戶代理字符串 |
–without-http_upstream_ip_hash_module | 禁用Upstream模塊。該模塊用於配置負載均衡結構 |
如下是Nginx默認關閉的模塊,可使用表格中的命令來開啓相應模塊:
默認禁用的模塊 | 描述 |
---|---|
–with-http_ssl_module | 開啓SSL模塊,支持使用HTTPS協議的網頁 |
–with-http_realip_module | 開啓Real IP的支持,該模塊用於從客戶請求的頭數據中讀取real IP地址 |
–with-http_addition_module | 開啓Addition模塊,該模塊容許你追加或前置數據(prepend data)到響應的主體部分 |
–with-http_xslt_module | 開啓XSLT模塊的支持,該模塊實現XSLT轉化爲XML文檔 |
–with-http_image_filter_module | 開啓Image Filter模塊,該模塊是讓你修改圖像。注意:若是想編譯該模塊,須要在系統中安裝libgd庫 |
–with-http_geoip_module | 開啓GeoIP模塊,該模塊經過使用MaxMind’s GeoI 二進制數據庫來獲取客戶端在地理上的分佈。注意:若是但願編譯該模塊,須要在系統中安裝libgeoip庫。 |
–with-http_sub_module | 開啓Substitution模塊,該模塊用於在網頁中替換文本 |
–with-http_dav_module | 開啓WebDAV模塊 |
–with-http_flv_module | 開啓FLV模塊,該模塊用於專門處理.flv(flash視頻)文件 |
–with-http_gzip_static_module | 開啓Gzip靜態模塊,該模塊用於發送預壓縮的文件 |
–with-http_random_index_module | 開啓Random Index模塊。該模塊用於挑選一個隨機的文件做爲該目錄的index |
–with-http_secure_link_module | 開啓Secure Link模塊,該模塊用於在URL中檢測關鍵字的存在 |
–with-http_stub_status_module | 開啓Stub Status模塊,該模塊會產生一個服務器狀態和信息頁 |
–with-google_perftools_module | 開啓google性能工具模塊 |
郵件服務代理 | |
---|---|
–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-rtsig_module | 開啓rtsig模塊,使用rtsig做爲事件通知機制 |
–with-select_module | 開啓select模塊,使用select做爲事件通知機制。默認狀況下,該模塊是開啓的,除非系統有一種更好的方式發現——kqueue, epoll, rtsig 或 poll |
–without-select_module | 禁用select模塊 |
–with-poll_module | 開啓poll模塊,該模塊使用poll做爲事件通知機制。默認狀況下,若是有效,該模塊是開啓的,除非系統上有一種更好的方式發現——kqueue, epoll或rtsig |
–without-poll_module | 禁用poll模塊 |
用戶和組選項 | |
–user=… | 指定啓動Nginx進程的默認用戶。這個設置僅用於在配置文件中省略user指令來指定用戶的狀況 |
–group=… | 指定啓動Nginx進程默認的用戶組。這個設置僅用於在配置文件中省略使用group指令來指定用戶的狀況 |
其它選項 | |
–with-ipv6 | 開啓對IPv6的支持 |
–without-http | 禁用HTTP服務 |
–without-http-cache | 禁用HTTP緩衝功能 |
–add-module=PATH | 經過指定的路徑編譯添加第三方模塊。若是但願編譯多個模塊,那麼該選項能夠無限次使用 |
–with-debug | 開啓記錄額外的調試信息 |