一、軟件下載
預先知道需要哪些軟件庫去下載:
1、nginx源碼
下載源碼位置 http://nginx.org/en/download.html
注意要下穩定版,即帶有stable的版本為穩定版。
org后綴的域名是社區版。.com后綴的域名是nginx的商業版。選擇社區版。
筆者下載的是nginx-1.12.2.tar.gz。
2、下載openssl
這個軟件做https的時候需要,建議最好編譯安裝的時候,就安裝上去。
編譯nginx時候,使用參數--with-openssl=源碼位置。
下載地址: https://www.openssl.org/source/
3、下載pcre庫。
下載地址:http://www.pcre.org/ ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
pcre是一個正則庫,nginx使用正則進行重寫要用到,必須安裝。很多軟件都會使用這個庫來做正則匹配,比如php引擎也會用到(pcre擴展,只是php源碼中自帶了這個庫)
編譯nginx時,使用參數--with-pcre=來指定pcre源碼的位置,是源碼位置,所以不需要編譯安裝pcre庫的。
注:pcre庫在官網,存在兩個版本,pcre和pcre2。要下載pcre,pcre2是新版的庫,編譯是通不過的。
編譯pcre就必須用到c++編譯器。
使用pcre2就使用gcc編譯器。
4、下載zlib庫
下載地址為:http://www.zlib.net/
5、基礎軟件需求
需要c語言編譯器gcc、 c++編譯器gcc-c++
安裝方式編譯器方式,centos操作系統下,直接使用yum命令安裝
yum install gcc gcc-c++
ubantu使用apt-get命令安裝:
apt-get install gcc g++
注:centos系統的軟件倉庫和ubantu系統的軟件倉庫,c++編譯器使用的名稱不一樣。
二、安裝過程
1、解壓各類軟件源碼
tar -xzvf 源碼包.tar.gz
如果是下載的zip壓縮包,則使用unzip命令解壓: unzip 壓縮包
解壓后,會在當前目錄創建一個文件夾。
要預先解壓pcre、openssl、zlib的源碼。--with-pcre、--with-http_ssl_module --with-openssl、--with-zlib指定是這些庫的源碼目錄。
2、編譯源碼
切換到nginx源碼目錄
cd 源碼目錄
執行如下命令:
./configure --prefix=/disk2/soft/nginx/
--with-pcre=/disk2/soft_download/pcre-8.38
--with-http_ssl_module 、
--with-openssl=/disk2/soft_download/openssl-1.0.2m
--with-debug
--with-http_stub_status_module
--with-http_gzip_static_module
--with-zlib=/disk2/soft_download/zlib-1.2.11
執行成功后,執行如下命令:
make && make install
解釋:
prefix是指定nginx安裝到哪個目錄。建議指定,指定的好處,清晰容易找。如果不指定目錄,nginx的二進制文件和配置文件就會按照默認目錄,分散到多個文件夾:/usr/bin/nginx、/etc/nginx.conf。
注意pcre等參數,指定的是源碼目錄,不是安裝好的目錄。nginx不同於php是引入庫的安裝目錄,nginx它會把這些組件直接編到nginx里面去,好處是性能高,依賴性少。php引入的是已經安裝好的庫目錄,如果庫文件夾被刪除了,php引擎使用時就會出錯。
--conf-path=配置文件位置
、--pid-path=pid文件的位置
、--user=
name、
--group=
name沒必要指定。這些參數,有的可以在啟動nginx時指定,有的可以在nginx.conf中去配置。
追求編譯的參數越簡單明了,障礙越少。
--pid-path、
--user=
可以在編譯完成后,去nginx.conf中配置。name、
--group=
name
--conf-path,因為
默認就是"安裝目錄/conf/nginx.conf"。若想載入指定的配置文件,啟動的時候也可以用-c參數指定。所以不需要指定,
3、啟動和開機啟動
則啟動命令為:安裝目錄/sbin/nginx
假設編譯安裝時指定的--prefix參數配置的安裝目錄為:/disk2/soft/nginx。
啟動命令就是:/disk2/soft/nginx/sbin/nginx
這是nginx的二進制文件。直接在命令行中輸入這個就可以啟動。使用-c參數載入指定的nginx.conf配置文件。
/disk2/soft/nginx/sbin/nginx -c /disk2/soft/nginx/conf/nginx.conf
若沒有指定-c參數,載入的是配置文件 "安裝目錄/conf/nginx.conf",用源碼編譯安裝,一般不用指定-c就可以。
注:如果在源碼編譯時候使用了--conf-path
=指定了nginx.conf配置文件的位置,那么nginx默認會去這個位置載入nginx配置文件。沒有指定這個參數,
使用命令/disk2/soft/nginx/sbin/nginx 啟動nginx時,默認是去"prefix/conf/nginx.conf" 載入配置文件。除非啟動時,使用-c參數明確告訴nginx配置文件位置,就可以覆蓋掉默認的配置。
/disk2/soft/nginx/sbin/nginx -t 測驗配置文件語法是否正確
/disk2/soft/nginx/sbin/nginx -s reload 重新載入配置文件
啟動命令是"/disk2/soft/nginx/sbin/nginx",把這個加到 /etc/rc.local文件中就可以了。
4、做成服務
源碼編譯,是沒有加到service服務的,也就是沒法:service nginx start這樣使用。若想這樣,需要自己設置。
筆者習慣使用/disk2/soft/nginx/sbin/nginx 來啟動。這樣很清晰知道是哪個nginx。如果服務器安裝了多個nginx,輸入路徑來啟動、reload,這樣很清晰。
如果需要停止掉nginx服務。直接使用" kill -9進程編號"。
官網有個做成服務的啟動腳本:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/ 可惜這個是在centos5下測驗的。我放centos6.9下則有點瑕疵,它使用killproc來殺掉進程名稱。這樣沒效。
找到一個腳本,經過測驗,內容如下:
#! /bin/bash # Description: Startup script for webserver on CentOS. cp it in /etc/init.d and # chkconfig --add nginx && chkconfig nginx on # then you can use server command control nginx # # chkconfig: 2345 08 99 # description: Starts, stops nginx set -e
#將nginx二進制文件所在目錄加到環境變量,在命令行直接使用nginx就可以定位到二進制文件。這個配置不是必須的步驟,可以注釋掉。 PATH=$PATH:/disk2/soft/nginx/sbin/ DESC="nginx daemon" NAME=nginx
#修改這里成自己的nginx二進制文件位置 DAEMON=/disk2/soft/nginx/sbin/nginx
#配置文件位置 CONFIGFILE=/disk2/soft/nginx/conf/nginx.conf
#pid文件位置。在nginx.conf中指定的,這里指定是為了方便stop時去殺掉這個進程編號 PIDFILE=/disk2/soft/nginx/logs/nginx.pid SCRIPTNAME=/etc/init.d/$NAME # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0 d_start() { $DAEMON -c $CONFIGFILE || echo -n " already running" } d_stop() { kill -QUIT `cat $PIDFILE` || echo -n " not running" } d_reload() { kill -HUP `cat $PIDFILE` || echo -n " can't reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" d_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" d_stop echo "." ;; reload) echo -n "Reloading $DESC configuration..." d_reload echo "reloaded." ;; restart) echo -n "Restarting $DESC: $NAME" d_stop sleep 1 d_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac exit 0
重命名一個自己喜歡的名稱。把腳本放到/etc/init.d/目錄下。比如nginx,命令service nginx start中的nginx就是對應這個文件名。
腳本的內容要稍微修改。因為二進制文件和配置文件的目錄是不一樣。
使用service來啟動nginx,不是必備的。其實建議直接用完整路徑來啟動。很清晰,排查問題的時候,指定nginx的路徑。