nginx安裝及其配置詳細教程

1 nginx 介紹

1 什麼是nginx

Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。html

由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx可以支支撐5萬併發連接,linux

而且cpu、內存等資源消耗卻很是低,運行很是穩定。nginx

 

2 應用場景

一、http服務器。Nginx是一個http服務能夠獨立提供http服務。能夠作網頁靜態服務器。c++

二、虛擬主機。能夠實如今一臺服務器虛擬出多個網站。例如我的網站使用的虛擬主機。正則表達式

三、反向代理,負載均衡。當網站的訪問量達到必定程度後,單臺服務器不能知足用戶的請求時,算法

須要用多臺服務器集羣可使用nginx作反向代理。而且多臺服務器能夠平均分擔負載,vim

不會由於某臺服務器負載高宕機而某臺服務器閒置的狀況。centos

 

2 nginx安裝

1 下載

官方網址:http://nginx.org/en/download.html瀏覽器

官網提供三種版本:tomcat

Nginx官網提供了三個類型的版本
Mainline version:Mainline 是 Nginx 目前主力在作的版本,能夠說是開發版
Stable version:最新穩定版,生產環境上建議使用的版本
Legacy versions:遺留的老版本的穩定版

咱們這裏下載的是Stable version下面的

使用的版本是1.14.0.tar.gz.

2 安裝要求的環境

下面的環境須要視本身的系統狀況而定,沒有的環境安裝如下就好。

1.須要安裝gcc環境

# yum install gcc-c++

2.第三方的開發包

1 PERE

PCRE(Perl Compatible Regular Expressions)是一個Perl庫,包括 perl 兼容的正則表達式庫。

nginx的http模塊使用pcre來解析正則表達式,因此須要在linux上安裝pcre庫。

注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也須要此庫

# yum install -y pcre pcre-devel

2 zlib

zlib庫提供了不少種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,因此須要在linux上安裝zlib庫。

# yum install -y zlib zlib-devel

3 openssl

OpenSSL 是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、經常使用的密鑰和證書封裝管理功能及SSL協議,

並提供豐富的應用程序供測試或其它目的使用。

nginx不只支持http協議,還支持https(即在ssl協議上傳輸http),因此須要在linux安裝openssl庫。

# yum -y install pcre  pcre-devel zlib  zlib-devel openssl openssl-devel

3 nginx安裝過程

1 把nginx源碼包上傳到linux系統上

2 解壓到/usr/local下面

# tar -xvf nginx-1.14.0.tar.gz -C /usr/local

3 使用cofigure命令建立一個makeFile文件

執行下面的命令的時候,必定要進入到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

若是沒有makeFile文件,編譯的時候會報錯

\ 表示命令尚未輸入完,換行的意思。

--prefix=/usr/local/nginx  表示軟件安裝到/usr/local/nginx下面。
這個make install 的時候就不用在指定安裝路徑。
執行完成後查看目錄裏面已經多了一個Makefile文件

注意:啓動nginx以前,上邊將臨時文件目錄指定爲/var/temp/nginx,

須要在/var下建立temp及nginx目

4 建立目錄/var/temp/nginx/

# mkdir /var/temp/nginx -p

-p 表示級聯建立的意思

5 進入nginx-1.14.0裏面執行make命令進行編譯

 

6 進入nginx-1.14.0裏面執行make install 命令進行安裝

 這裏不須要再次執行安裝路徑,建立makefile文件的時候已經指定了。

7 進入安裝位置/usr/local/nginx查看目錄結構

其中html是裏面首頁html文件。conf裏面是配置文件。sbin裏面只執行文件。

3 啓動nginx

進入sbin目錄,執行命令./nginx

[root@admin sbin]# ./nginx

4 查看nginx是否啓動

[root@admin sbin]# ps -aux | grep nginx

ps命令用於報告當前系統的進程狀態。

-a:顯示全部終端機下執行的程序,除了階段做業領導者以外。

a:顯示現行終端機下的全部程序,包括其餘用戶的程序。

u:以用戶爲主的格式來顯示程序情況。

x:顯示全部程序,不以終端機來區分。

 

5 關閉nginx

[root@admin sbin]#  ./nginx -s stop

或者

[root@admin sbin]# ./nginx -s quit

 

6 重啓nginx

先關閉,而後啓動

 

7 刷新配置文件

[root@admin sbin]# ./nginx -s reload

 

8 關閉防火牆,開啓遠程訪問

首先須要關閉防火牆:默認端口是80

方法一:永久開放80端口

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/rc.d/init.d/iptables save

方法二:臨時關閉系統防火牆

# service iptables stop  

方法三:永久關閉修改配置開機不啓動防火牆

# chkconfig iptables off 

特殊:針對阿里雲

須要添加安全組規則

9 訪問nginx

10 配置虛擬主機

就是在一臺服務器啓動多個網站。

如何區分不一樣的網站:主要有如下兩種方式

方式一:端口不一樣

方式二:域名不一樣

11 經過端口區分不一樣的主機

nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf

原始配置文件的內容以下:

咱們能夠經過配置多個server,從而配置多個虛擬機

下面測試如下:複製原來的html目錄,更名爲html-81

修改如下里面的index.html文件,方便區分

[root@admin nginx]# vim html-81/index.html

修改完成以後刷新如下配置文件

[root@admin sbin]# ./nginx -s reload

而後分別訪問192.168.204.131:80 和192.168.204.131:81

12 多個域名區分虛擬主機

1 什麼是域名

域名就是網站:www.baidu.com就是域名

DNS域名解析服務器,把域名解析爲ip地址。保存的就是域名和ip地址的映射關係。

一級域名:baidu.com

二級域名:www.baidu.com

三級域名:image.baidu.com

一個域名對應與一個ip地址,一個ip地址能夠被多個域名綁定。

只須要買一個一級域名,後面的二級,三級域名你本身能夠隨便定義。

 

本地測試咱們能夠經過修改hosts配置文件來完成:

hosts文件的位置:C:\Windows\System32\drivers\etc

能夠本身手動配置域名和ip的映射關係,若是hosts文件中配置了域名和ip的對應關係,不須要走DNS域名解析服務器。

由於拿到一個域名,首先是到hosts文件裏面查找,沒有才有去DNS域名解析器查找。

2 nginx配置

3 測試

1 修改本地hosts配置文件

2 複製html目錄,分別更名爲html-taobao和html-baidu

3 分別修改html-baidu和html-taobao裏面的index.html文件,方便區分

4 刷新配置文件

[root@admin sbin]# ./nginx -s reload

5 而後使用瀏覽器分別訪問:www.taobao.com 和 www.baidu.com

 

13 正向代理

14 反向代理

反向代理服務器決定那臺服務器提供服務

15 nginx實現反向代理

兩個域名指向同一臺nginx服務器,用戶訪問不一樣的域名顯示不一樣的網頁內容。

兩個域名是www.baidu.com和www.taobao.com

nginx代理服務器使用虛擬機192.168.204.131

第一步:安裝兩個tomcat,分別運行在8080和8081端口。

第二步:啓動兩個tomcat。

第三步:反向代理服務器的配置

 

第四步:nginx從新加載配置文件

第五步:配置域名

在hosts文件中添加域名和ip的映射關係

192.168.204.131 www.baidu.com

192.168.204.131 www.taobao.com

 

16 負載均衡

若是一個服務由多個服務器提供,須要把負載分配到不一樣的服務器處理,須要負載均衡。

能夠根據服務器的實際狀況調整服務器權重。權重越高分配的請求越多,權重越低,請求越少。默認是都是1

17 設置nginx開機自啓動(centos6.5)

每次啓動nginx服務都須要到安裝目錄下的/sbin下面,感受挺麻煩的。

下面介紹一下如何在Linux(CentOS)系統上,設置nginx開機自啓動。

1 用腳本管理nginx服務

第一步:在/etc/init.d/目錄下建立nginx文件,命令以下:

# touch /etc/init.d/nginx

第二步:在建立的nginx文件中加入下面的內容

首先執行命令:

# vim /etc/init.d/nginx

而後加下面的內容複製到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

上面的腳本文件並非本身寫的,是nginx官方提供的。

地址:http://wiki.nginx.org/RedHatNginxInitScript

注意:若是是自定義安裝的nginx,修改根據實際狀況修改安裝路和配置文件。

nginx="/usr/sbin/nginx" 修改爲你的nginx執行程序的路徑。好比個人是nginx="/usr/local/nginx/sbin/nginx"
NGINX_CONF_FILE="/etc/nginx/nginx.conf" 修改爲你的配置文件的路徑
例如:NGINX_CONF_FILE="/usr/local/nginx/nginx.conf

修改完成後保存腳本文件,wq 保存並退出

第三步:設置nginx文件的權限

# chmod a+x /etc/init.d/nginx

解釋:a+x==>all user can execute 全部用戶可執行)的意思

第四步:管理腳本

到這裏,咱們就可使用nginx腳本對服務進行管理了

# /etc/init.d/nginx start      啓動服務
# /etc/init.d/nginx stop       中止服務  
# /etc/init.d/nginx restart 重啓服務 # /etc/init.d/nginx status 查看服務的狀態
# /etc/init.d/nginx reload 刷新配置文件

2 使用chkconfig管理

上面的方法完成了用腳本管理nginx服務的功能,可是仍是不太方便,好比要設置nginx開機啓動等。

這個時候咱們可使用chkconfig來進行管理。

第一步:將nginx服務加入chkconfig管理列表

# chkconfig --add /etc/init.d/nginx

第二步:使用service管理服務

# service nginx start    啓動服務
# service nginx stop     中止服務
# service nginx restart 重啓服務
# service nginx status 查詢服務的狀態
# service nginx relaod 刷新配置文

第三步:設置終端模式開機啓動

# chkconfig nginx on

 

17 設置nginx開機自啓動(centos7.4)

 第一步:進入到/lib/systemd/system/目錄

[root@iz2z init.d]# cd /lib/systemd/system/

第二步:建立nginx.service文件,並編輯

# vim nginx.service

內如以下:

[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]:服務的說明
Description:描述服務
After:描述服務類別
[Service]服務運行參數的設置
Type=forking是後臺運行的形式
ExecStart爲服務的具體運行命令
ExecReload爲重啓命令
ExecStop爲中止命令
PrivateTmp=True表示給服務分配獨立的臨時空間
注意:[Service]的啓動、重啓、中止命令所有要求使用絕對路徑
[Install]運行級別下服務安裝的相關設置,可設置爲多用戶,即系統運行級別爲3

保存退出。

第三步:加入開機自啓動

# systemctl enable nginx

若是不想開機自啓動了,可使用下面的命令取消開機自啓動

# systemctl disable nginx

第四步:服務的啓動/中止/刷新配置文件/查看狀態

# systemctl start nginx.service          啓動nginx服務

# systemctl stop nginx.service  中止服務
# systemctl restart nginx.service  從新啓動服務
# systemctl list-units --type=service 查看全部已啓動的服務
# systemctl status nginx.service 查看服務當前狀態
# systemctl enable nginx.service 設置開機自啓動
# systemctl disable nginx.service 中止開機自啓動

 

 一個常見的錯誤

Warning: nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.

 直接按照提示執行命令systemctl daemon-reload 便可。

# systemctl daemon-reload

 

18 重啓系統,再次啓動nginx報錯

1 故障現場

以前在虛擬機centos6.5上面設置自啓動以後,從新啓動系統能夠正常啓動,也不會出錯。

centos6.5的自啓動設置見16部分知識點。

可是在centos7.4(阿里雲上面),參照第17部分配置好了自啓動。重啓系統發現nginx並無自啓動

使用命名systemctl status nginx查看了一下狀態,內容以下:

而後我直接進入/usr/local/nginx/sbin目錄下面,執行./nginx,出現了下面的錯誤提示:

從這兩個提示信息,能夠大概看出告訴咱們的就是找不到/var/run/nginx/目錄下面的nginx.pid文件。

2 故障解決

第一步:進入 cd /usr/local/nginx/conf/ 目錄,編輯配置文件nginx.conf ;

在配置文件中找到:#pid        logs/nginx.pid;

將其修改成:去掉註釋,修改爲本身的路徑

修改完成保存退出

第二步:建立目錄/var/run/nginx/

# mkdir /var/run/nginx -p

第三步:啓動nginx服務

# /usr/local/nginx/sbin/nginx

能夠查看一下是否成功啓動了

3 故障重現

[emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)處理

測試發現,只要執行reboot命令重啓,var/run/nginx,nginx這個文件夾都會被刪除,

搞得每一次都要去創建nginx這個文件夾,簡直麻煩到了極點,實在受不了。下面

繼續來解決這個問題。

第一步:進入 cd /usr/local/nginx/conf/ 目錄,編輯配置文件nginx.conf ;

第二步:在/usr/local/nginx目錄下創建logs文件夾

# mkdir /usr/local/nginx/logs

第三步:把/var/run/nginx/目錄下的nginx.pid這個文件拷貝到第二步建立的logs文件夾裏面。

# cp nginx.pid /usr/local/nginx/logs/

 

第四步:把logs這個文件夾在conf下也拷貝一份

# cp -r logs conf

第五步:修改權限/usr/local/nginx/logs/目錄下面的nginx.pid文件的權限。

[root@iz2logs]# chmod 755 nginx.pid

第六步:重啓reboot

# reboot

第六步:啓動nginx

# /usr/local/nginx/sbin/nginx

此次是終於成功解決了,一邊安裝一邊解決問題,到這裏nginx老是算是能夠自啓動了,而且也不會重啓後找不到nginx.pid文件。真的太不容易了。

解決的原理:就是讓它去另一個地方找nginx.pid文件,

由於/var/run/nginx/nginx.pid這個文件老是重啓就刪除了

簡單解決方案

上面的過程有點繁瑣了,實際能夠直接按照下面的這個簡單方法解決

修改nginx.conf文件以下:

在/usr/local/nginx/目錄下建立一個logs目錄。

而後啓動就能夠了,而且重啓也不會被刪除。

這樣下面的日誌文件的配置也能夠簡化爲去掉# error_log  logs/error.log  info; 前面的「#」就能夠了

error_log  logs/error.log  info;

19 配置日誌文件的位置

第一步:進入 cd /usr/local/nginx/conf/ 目錄,編輯配置文件nginx.conf ;

第二步:保證確定有這個路徑,能夠直接建立一下這個配置的目錄

# mkdir -p /var/log/nginx/

第三步:刷新配置文件

# /usr/local/nginx/sbin/nginx -s reload
相關文章
相關標籤/搜索