nginx安裝以及配置的詳細(xì)過(guò)程記錄
1 nginx 介紹
1 什么是nginx
Nginx是一款高性能的http服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器。
由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā),官方測(cè)試nginx能夠支支撐5萬(wàn)并發(fā)鏈接,
并且cpu、內(nèi)存等資源消耗卻非常低,運(yùn)行非常穩(wěn)定。
2 應(yīng)用場(chǎng)景
1、http服務(wù)器。Nginx是一個(gè)http服務(wù)可以獨(dú)立提供http服務(wù)??梢宰鼍W(wǎng)頁(yè)靜態(tài)服務(wù)器。
2、虛擬主機(jī)??梢詫?shí)現(xiàn)在一臺(tái)服務(wù)器虛擬出多個(gè)網(wǎng)站。例如個(gè)人網(wǎng)站使用的虛擬主機(jī)。
3、反向代理,負(fù)載均衡。當(dāng)網(wǎng)站的訪問(wèn)量達(dá)到一定程度后,單臺(tái)服務(wù)器不能滿(mǎn)足用戶(hù)的請(qǐng)求時(shí),
需要用多臺(tái)服務(wù)器集群可以使用nginx做反向代理。并且多臺(tái)服務(wù)器可以平均分擔(dān)負(fù)載,
不會(huì)因?yàn)槟撑_(tái)服務(wù)器負(fù)載高宕機(jī)而某臺(tái)服務(wù)器閑置的情況。
2 nginx安裝
1 下載
官方網(wǎng)址:http://nginx.org/en/download.html
官網(wǎng)提供三種版本:
Nginx官網(wǎng)提供了三個(gè)類(lèi)型的版本
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以說(shuō)是開(kāi)發(fā)版
Stable version:最新穩(wěn)定版,生產(chǎn)環(huán)境上建議使用的版本
Legacy versions:遺留的老版本的穩(wěn)定版
我們這里下載的是Stable version下面的
使用的版本是1.14.0.tar.gz.
2 安裝要求的環(huán)境
下面的環(huán)境需要視自己的系統(tǒng)情況而定,沒(méi)有的環(huán)境安裝以下就好。
1.需要安裝gcc環(huán)境
# yum install gcc-c++
2.第三方的開(kāi)發(fā)包
1 PERE
PCRE(Perl Compatible Regular Expressions)是一個(gè)Perl庫(kù),包括perl兼容的正則表達(dá)式庫(kù)。
nginx的http模塊使用pcre來(lái)解析正則表達(dá)式,所以需要在linux上安裝pcre庫(kù)。
注:pcre-devel是使用pcre開(kāi)發(fā)的一個(gè)二次開(kāi)發(fā)庫(kù)。nginx也需要此庫(kù)。
# yum install -y pcre pcre-devel
2 zlib
zlib庫(kù)提供了很多種壓縮和解壓縮的方式,nginx使用zlib對(duì)http包的內(nèi)容進(jìn)行g(shù)zip,所以需要在linux上安裝zlib庫(kù)。
# yum install -y zlib zlib-devel
3 openssl
OpenSSL是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書(shū)封裝管理功能及SSL協(xié)議,
并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
nginx不僅支持http協(xié)議,還支持https(即在ssl協(xié)議上傳輸http),所以需要在linux安裝openssl庫(kù)。
# yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
3 nginx安裝過(guò)程
1 把nginx源碼包上傳到linux系統(tǒng)上
2 解壓到/usr/local下面
# tar -xvf nginx-1.14.0.tar.gz -C /usr/local
3 使用cofigure命令創(chuàng)建一個(gè)makeFile文件
執(zhí)行下面的命令的時(shí)候,一定要進(jìn)入到nginx-1.14.0目錄里面去。
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi \--with-http_stub_status_module \--with-http_ssl_module \--with-file-aio \--with-http_realip_module
如果沒(méi)有makeFile文件,編譯的時(shí)候會(huì)報(bào)錯(cuò)
\ 表示命令還沒(méi)有輸入完,換行的意思。
--prefix=/usr/local/nginx 表示軟件安裝到/usr/local/nginx下面。
這個(gè)make install 的時(shí)候就不用在指定安裝路徑。
執(zhí)行完成后查看目錄里面已經(jīng)多了一個(gè)Makefile文件
注意:?jiǎn)?dòng)nginx之前,上邊將臨時(shí)文件目錄指定為/var/temp/nginx,
需要在/var下創(chuàng)建temp及nginx目
4 創(chuàng)建目錄/var/temp/nginx/
# mkdir /var/temp/nginx -p
-p 表示級(jí)聯(lián)創(chuàng)建的意思
5 進(jìn)入nginx-1.14.0里面執(zhí)行make命令進(jìn)行編譯
6 進(jìn)入nginx-1.14.0里面執(zhí)行make install 命令進(jìn)行安裝
這里不需要再次執(zhí)行安裝路徑,創(chuàng)建makefile文件的時(shí)候已經(jīng)指定了。
7 進(jìn)入安裝位置/usr/local/nginx查看目錄結(jié)構(gòu)
其中html是里面首頁(yè)html文件。conf里面是配置文件。sbin里面只執(zhí)行文件。
3 啟動(dòng)nginx
進(jìn)入sbin目錄,執(zhí)行命令./nginx
[root@admin sbin]# ./nginx
4 查看nginx是否啟動(dòng)
[root@admin sbin]# ps -aux | grep nginx
ps命令用于報(bào)告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)。
-a:顯示所有終端機(jī)下執(zhí)行的程序,除了階段作業(yè)領(lǐng)導(dǎo)者之外。
a:顯示現(xiàn)行終端機(jī)下的所有程序,包括其他用戶(hù)的程序。
u:以用戶(hù)為主的格式來(lái)顯示程序狀況。
x:顯示所有程序,不以終端機(jī)來(lái)區(qū)分。
5 關(guān)閉nginx
[root@admin sbin]# ./nginx -s stop
或者
[root@admin sbin]# ./nginx -s quit
6 重啟nginx
先關(guān)閉,然后啟動(dòng)
7 刷新配置文件
[root@admin sbin]# ./nginx -s reload
8 關(guān)閉防火墻,開(kāi)啟遠(yuǎn)程訪問(wèn)
首先需要關(guān)閉防火墻:默認(rèn)端口是80
方法一:永久開(kāi)放80端口
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT /etc/rc.d/init.d/iptables save
方法二:臨時(shí)關(guān)閉系統(tǒng)防火墻
# service iptables stop
方法三:永久關(guān)閉修改配置開(kāi)機(jī)不啟動(dòng)防火墻
# chkconfig iptables off
特殊:針對(duì)阿里云
需要添加安全組規(guī)則
9 訪問(wèn)nginx
10 配置虛擬主機(jī)
就是在一臺(tái)服務(wù)器啟動(dòng)多個(gè)網(wǎng)站。
如何區(qū)分不同的網(wǎng)站:主要有以下兩種方式
方式一:端口不同
方式二:域名不同
11 通過(guò)端口區(qū)分不同的主機(jī)
nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf
原始配置文件的內(nèi)容如下:
我們可以通過(guò)配置多個(gè)server,從而配置多個(gè)虛擬機(jī)
下面測(cè)試以下:復(fù)制原來(lái)的html目錄,改名為html-81
修改以下里面的index.html文件,方便區(qū)分
[root@admin nginx]# vim html-81/index.html
修改完成之后刷新以下配置文件
[root@admin sbin]# ./nginx -s reload
然后分別訪問(wèn)192.168.204.131:80 和192.168.204.131:81
12 多個(gè)域名區(qū)分虛擬主機(jī)
1 什么是域名
域名就是網(wǎng)站:www.baidu.com就是域名
DNS域名解析服務(wù)器,把域名解析為ip地址。保存的就是域名和ip地址的映射關(guān)系。
一級(jí)域名:baidu.com
二級(jí)域名:www.baidu.com
三級(jí)域名:image.baidu.com
一個(gè)域名對(duì)應(yīng)與一個(gè)ip地址,一個(gè)ip地址可以被多個(gè)域名綁定。
只需要買(mǎi)一個(gè)一級(jí)域名,后面的二級(jí),三級(jí)域名你自己可以隨便定義。
本地測(cè)試我們可以通過(guò)修改hosts配置文件來(lái)完成:
hosts文件的位置:C:\Windows\System32\drivers\etc
可以自己手動(dòng)配置域名和ip的映射關(guān)系,如果hosts文件中配置了域名和ip的對(duì)應(yīng)關(guān)系,不需要走DNS域名解析服務(wù)器。
因?yàn)槟玫揭粋€(gè)域名,首先是到hosts文件里面查找,沒(méi)有才有去DNS域名解析器查找。
2 nginx配置
3 測(cè)試
1 修改本地hosts配置文件
2 復(fù)制html目錄,分別改名為html-taobao和html-baidu
3 分別修改html-baidu和html-taobao里面的index.html文件,方便區(qū)分
4 刷新配置文件
[root@admin sbin]# ./nginx -s reload
5 然后使用瀏覽器分別訪問(wèn):www.taobao.com 和 www.baidu.com
13 正向代理
14 反向代理
反向代理服務(wù)器決定那臺(tái)服務(wù)器提供服務(wù)
15 nginx實(shí)現(xiàn)反向代理
兩個(gè)域名指向同一臺(tái)nginx服務(wù)器,用戶(hù)訪問(wèn)不同的域名顯示不同的網(wǎng)頁(yè)內(nèi)容。
兩個(gè)域名是www.baidu.com和www.taobao.com
nginx代理服務(wù)器使用虛擬機(jī)192.168.204.131
第一步:安裝兩個(gè)tomcat,分別運(yùn)行在8080和8081端口。
第二步:?jiǎn)?dòng)兩個(gè)tomcat。
第三步:反向代理服務(wù)器的配置
第四步:nginx重新加載配置文件
第五步:配置域名
在hosts文件中添加域名和ip的映射關(guān)系
192.168.204.131 www.baidu.com
192.168.204.131 www.taobao.com
16 負(fù)載均衡
如果一個(gè)服務(wù)由多個(gè)服務(wù)器提供,需要把負(fù)載分配到不同的服務(wù)器處理,需要負(fù)載均衡。
可以根據(jù)服務(wù)器的實(shí)際情況調(diào)整服務(wù)器權(quán)重。權(quán)重越高分配的請(qǐng)求越多,權(quán)重越低,請(qǐng)求越少。默認(rèn)是都是1
17 設(shè)置nginx開(kāi)機(jī)自啟動(dòng)(centos6.5)
每次啟動(dòng)nginx服務(wù)都需要到安裝目錄下的/sbin下面,感覺(jué)挺麻煩的。
下面介紹一下如何在Linux(CentOS)系統(tǒng)上,設(shè)置nginx開(kāi)機(jī)自啟動(dòng)。
1 用腳本管理nginx服務(wù)
第一步:在/etc/init.d/目錄下創(chuàng)建nginx文件,命令如下:
# touch /etc/init.d/nginx
第二步:在創(chuàng)建的nginx文件中加入下面的內(nèi)容
首先執(zhí)行命令:
# vim /etc/init.d/nginx
然后加下面的內(nèi)容復(fù)制到nginx配置文件中
#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
上面的腳本文件并不是自己寫(xiě)的,是nginx官方提供的。
地址:http://wiki.nginx.org/RedHatNginxInitScript
注意:如果是自定義安裝的nginx,修改根據(jù)實(shí)際情況修改安裝路和配置文件。
例如:NGINX_CONF_FILE="/usr/local/nginx/nginx.conf
修改完成后保存腳本文件,wq 保存并退出
第三步:設(shè)置nginx文件的權(quán)限
# chmod a+x /etc/init.d/nginx
解釋?zhuān)篴+x==>all user can execute 所有用戶(hù)可執(zhí)行)的意思
第四步:管理腳本
到這里,我們就可以使用nginx腳本對(duì)服務(wù)進(jìn)行管理了
# /etc/init.d/nginx start 啟動(dòng)服務(wù) # /etc/init.d/nginx stop 停止服務(wù) # /etc/init.d/nginx restart 重啟服務(wù) # /etc/init.d/nginx status 查看服務(wù)的狀態(tài) # /etc/init.d/nginx reload 刷新配置文件
2 使用chkconfig管理
上面的方法完成了用腳本管理nginx服務(wù)的功能,但是還是不太方便,比如要設(shè)置nginx開(kāi)機(jī)啟動(dòng)等。
這個(gè)時(shí)候我們可以使用chkconfig來(lái)進(jìn)行管理。
第一步:將nginx服務(wù)加入chkconfig管理列表
# chkconfig --add /etc/init.d/nginx
第二步:使用service管理服務(wù)
# service nginx start 啟動(dòng)服務(wù) # service nginx stop 停止服務(wù) # service nginx restart 重啟服務(wù) # service nginx status 查詢(xún)服務(wù)的狀態(tài) # service nginx relaod 刷新配置文
第三步:設(shè)置終端模式開(kāi)機(jī)啟動(dòng)
# chkconfig nginx on
17 設(shè)置nginx開(kāi)機(jī)自啟動(dòng)(centos7.4)
第一步:進(jìn)入到/lib/systemd/system/目錄
[root@iz2z init.d]# cd /lib/systemd/system/
第二步:創(chuàng)建nginx.service文件,并編輯
# vim nginx.service
內(nèi)如如下:
[Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
[Unit]:服務(wù)的說(shuō)明
Description:描述服務(wù)
After:描述服務(wù)類(lèi)別
[Service]服務(wù)運(yùn)行參數(shù)的設(shè)置
Type=forking是后臺(tái)運(yùn)行的形式
ExecStart為服務(wù)的具體運(yùn)行命令
ExecReload為重啟命令
ExecStop為停止命令
PrivateTmp=True表示給服務(wù)分配獨(dú)立的臨時(shí)空間
注意:[Service]的啟動(dòng)、重啟、停止命令全部要求使用絕對(duì)路徑
[Install]運(yùn)行級(jí)別下服務(wù)安裝的相關(guān)設(shè)置,可設(shè)置為多用戶(hù),即系統(tǒng)運(yùn)行級(jí)別為3
保存退出。
第三步:加入開(kāi)機(jī)自啟動(dòng)
# systemctl enable nginx
如果不想開(kāi)機(jī)自啟動(dòng)了,可以使用下面的命令取消開(kāi)機(jī)自啟動(dòng)
# systemctl disable nginx
第四步:服務(wù)的啟動(dòng)/停止/刷新配置文件/查看狀態(tài)
# systemctl start nginx.service 啟動(dòng)nginx服務(wù) # systemctl stop nginx.service 停止服務(wù) # systemctl restart nginx.service 重新啟動(dòng)服務(wù) # systemctl list-units --type=service 查看所有已啟動(dòng)的服務(wù) # systemctl status nginx.service 查看服務(wù)當(dāng)前狀態(tài) # systemctl enable nginx.service 設(shè)置開(kāi)機(jī)自啟動(dòng) # systemctl disable nginx.service 停止開(kāi)機(jī)自啟動(dòng)
一個(gè)常見(jiàn)的錯(cuò)誤Warning: nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.
直接按照提示執(zhí)行命令systemctl daemon-reload 即可。
# systemctl daemon-reload
18 重啟系統(tǒng),再次啟動(dòng)nginx報(bào)錯(cuò)
1 故障現(xiàn)場(chǎng)
之前在虛擬機(jī)centos6.5上面設(shè)置自啟動(dòng)之后,重新啟動(dòng)系統(tǒng)可以正常啟動(dòng),也不會(huì)出錯(cuò)。
centos6.5的自啟動(dòng)設(shè)置見(jiàn)16部分知識(shí)點(diǎn)。
但是在centos7.4(阿里云上面),參照第17部分配置好了自啟動(dòng)。重啟系統(tǒng)發(fā)現(xiàn)nginx并沒(méi)有自啟動(dòng)
使用命名systemctl status nginx查看了一下?tīng)顟B(tài),內(nèi)容如下:
然后我直接進(jìn)入/usr/local/nginx/sbin目錄下面,執(zhí)行./nginx,出現(xiàn)了下面的錯(cuò)誤提示:
從這兩個(gè)提示信息,可以大概看出告訴我們的就是找不到/var/run/nginx/目錄下面的nginx.pid文件。
2 故障解決
第一步:進(jìn)入cd /usr/local/nginx/conf/ 目錄,編輯配置文件nginx.conf ;
在配置文件中找到:#pid logs/nginx.pid;
將其修改為:去掉注釋?zhuān)薷某勺约旱穆窂?/p>
修改完成保存退出
第二步:創(chuàng)建目錄/var/run/nginx/
# mkdir /var/run/nginx -p
第三步:?jiǎn)?dòng)nginx服務(wù)
# /usr/local/nginx/sbin/nginx
可以查看一下是否成功啟動(dòng)了
3 故障重現(xiàn)
[emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)處理
測(cè)試發(fā)現(xiàn),只要執(zhí)行reboot命令重啟,var/run/nginx,nginx這個(gè)文件夾都會(huì)被刪除,
搞得每一次都要去建立nginx這個(gè)文件夾,簡(jiǎn)直麻煩到了極點(diǎn),實(shí)在受不了。下面
繼續(xù)來(lái)解決這個(gè)問(wèn)題。
第一步:進(jìn)入cd /usr/local/nginx/conf/ 目錄,編輯配置文件nginx.conf ;
第二步:在/usr/local/nginx目錄下建立logs文件夾
# mkdir /usr/local/nginx/logs
第三步:把/var/run/nginx/目錄下的nginx.pid這個(gè)文件拷貝到第二步創(chuàng)建的logs文件夾里面。
# cp nginx.pid /usr/local/nginx/logs/
第四步:把logs這個(gè)文件夾在conf下也拷貝一份
# cp -r logs conf
第五步:修改權(quán)限/usr/local/nginx/logs/目錄下面的nginx.pid文件的權(quán)限。
[root@iz2logs]# chmod 755 nginx.pid
第六步:重啟reboot
# reboot
第六步:?jiǎn)?dòng)nginx
# /usr/local/nginx/sbin/nginx
這次是終于成功解決了,一邊安裝一邊解決問(wèn)題,到這里nginx總是算是可以自啟動(dòng)了,并且也不會(huì)重啟后找不到nginx.pid文件。真的太不容易了。
解決的原理:就是讓它去另外一個(gè)地方找nginx.pid文件,
因?yàn)?var/run/nginx/nginx.pid這個(gè)文件總是重啟就刪除了。
簡(jiǎn)單解決方案
上面的過(guò)程有點(diǎn)繁瑣了,實(shí)際可以直接按照下面的這個(gè)簡(jiǎn)單方法解決
修改nginx.conf文件如下:
在/usr/local/nginx/目錄下創(chuàng)建一個(gè)logs目錄。
然后啟動(dòng)就可以了,并且重啟也不會(huì)被刪除。
這樣下面的日志文件的配置也可以簡(jiǎn)化為去掉# error_log logs/error.log info; 前面的“#”就可以了
error_log logs/error.log info;
19 配置日志文件的位置
第一步:進(jìn)入cd /usr/local/nginx/conf/ 目錄,編輯配置文件nginx.conf ;
第二步:保證肯定有這個(gè)路徑,可以直接創(chuàng)建一下這個(gè)配置的目錄
# mkdir -p /var/log/nginx/
第三步:刷新配置文件
# /usr/local/nginx/sbin/nginx -s reload
總結(jié)
到此這篇關(guān)于nginx安裝以及配置的文章就介紹到這了,更多相關(guān)nginx安裝及配置內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。