1 nginx 介紹
1 什么是nginx
nginx是一款高性能的http服務器/反向代理服務器及電子郵件(imap/pop3)代理服務器。
由俄羅斯的程序設計師igor sysoev所開發,官方測試nginx能夠支支撐5萬并發鏈接,
并且cpu、內存等資源消耗卻非常低,運行非常穩定。
2 應用場景
1、http服務器。nginx是一個http服務可以獨立提供http服務。可以做網頁靜態服務器。
2、虛擬主機。可以實現在一臺服務器虛擬出多個網站。例如個人網站使用的虛擬主機。
3、反向代理,負載均衡。當網站的訪問量達到一定程度后,單臺服務器不能滿足用戶的請求時,
需要用多臺服務器集群可以使用nginx做反向代理。并且多臺服務器可以平均分擔負載,
不會因為某臺服務器負載高宕機而某臺服務器閑置的情況。
2 nginx安裝
1 下載
官方網址:http://nginx.org/en/download.html
官網提供三種版本:
nginx官網提供了三個類型的版本
mainline version:mainline 是 nginx 目前主力在做的版本,可以說是開發版
stable version:最新穩定版,生產環境上建議使用的版本
legacy versions:遺留的老版本的穩定版
我們這里下載的是stable version下面的
使用的版本是1.14.0.tar.gz.
2 安裝要求的環境
下面的環境需要視自己的系統情況而定,沒有的環境安裝以下就好。
1.需要安裝gcc環境
1
|
# yum install gcc-c++ |
2.第三方的開發包
1 pere
pcre(perl compatible regular expressions)是一個perl庫,包括perl兼容的正則表達式庫。
nginx的http模塊使用pcre來解析正則表達式,所以需要在linux上安裝pcre庫。
注:pcre-devel是使用pcre開發的一個二次開發庫。nginx也需要此庫。
1
|
# yum install -y pcre pcre-devel |
2 zlib
zlib庫提供了很多種壓縮和解壓縮的方式,nginx使用zlib對http包的內容進行gzip,所以需要在linux上安裝zlib庫。
1
|
# yum install -y zlib zlib-devel |
3 openssl
openssl是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及ssl協議,
并提供豐富的應用程序供測試或其它目的使用。
nginx不僅支持http協議,還支持https(即在ssl協議上傳輸http),所以需要在linux安裝openssl庫。
1
|
# yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel |
3 nginx安裝過程
1 把nginx源碼包上傳到linux系統上
2 解壓到/usr/local下面
1
|
# tar -xvf nginx-1.14.0.tar.gz -c /usr/ local |
3 使用cofigure命令創建一個makefile文件
執行下面的命令的時候,一定要進入到nginx-1.14.0目錄里面去。
1
2
3
4
5
6
7
8
9
10
11
12
|
./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/
1
|
# 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
1
|
[root@admin sbin]# ./nginx |
4 查看nginx是否啟動
1
|
[root@admin sbin]# ps -aux | grep nginx |
ps命令用于報告當前系統的進程狀態。
-a:顯示所有終端機下執行的程序,除了階段作業領導者之外。
a:顯示現行終端機下的所有程序,包括其他用戶的程序。
u:以用戶為主的格式來顯示程序狀況。
x:顯示所有程序,不以終端機來區分。
5 關閉nginx
1
|
[root@admin sbin]# ./nginx -s stop |
或者
1
|
[root@admin sbin]# ./nginx -s quit |
6 重啟nginx
先關閉,然后啟動
7 刷新配置文件
1
|
[root@admin sbin]# ./nginx -s reload |
8 關閉防火墻,開啟遠程訪問
首先需要關閉防火墻:默認端口是80
方法一:永久開放80端口
1
2
|
/sbin/iptables -i input -p tcp --dport 80 -j accept /etc/rc.d/init.d/iptables save |
方法二:臨時關閉系統防火墻
1
|
# service iptables stop |
方法三:永久關閉修改配置開機不啟動防火墻
1
|
# chkconfig iptables off |
特殊:針對阿里云
需要添加安全組規則
9 訪問nginx
10 配置虛擬主機
就是在一臺服務器啟動多個網站。
如何區分不同的網站:主要有以下兩種方式
方式一:端口不同
方式二:域名不同
11 通過端口區分不同的主機
nginx配置文件的位置:/usr/local/nginx/conf/nginx.conf
原始配置文件的內容如下:
我們可以通過配置多個server,從而配置多個虛擬機
下面測試以下:復制原來的html目錄,改名為html-81
修改以下里面的index.html文件,方便區分
1
|
[root@admin nginx]# vim html-81/ index .html |
修改完成之后刷新以下配置文件
1
|
[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 刷新配置文件
1
|
[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文件,命令如下:
1
|
# touch /etc/init.d/nginx |
第二步:在創建的nginx文件中加入下面的內容
首先執行命令:
1
|
# vim /etc/init.d/nginx |
然后加下面的內容復制到nginx配置文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#!/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_conf_file="/usr/local/nginx/nginx.conf
修改完成后保存腳本文件,wq 保存并退出
第三步:設置nginx文件的權限
1
|
# chmod a+x /etc/init.d/nginx |
解釋:a+x==>all user can execute 所有用戶可執行)的意思
第四步:管理腳本
到這里,我們就可以使用nginx腳本對服務進行管理了
1
2
3
4
5
|
# /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管理列表
1
|
# chkconfig --add /etc/init.d/nginx |
第二步:使用service管理服務
1
2
3
4
5
|
# service nginx start 啟動服務 # service nginx stop 停止服務 # service nginx restart 重啟服務 # service nginx status 查詢服務的狀態 # service nginx relaod 刷新配置文 |
第三步:設置終端模式開機啟動
1
|
# chkconfig nginx on |
17 設置nginx開機自啟動(centos7.4)
第一步:進入到/lib/systemd/system/目錄
1
|
[root@iz2z init.d]# cd /lib/systemd/system/ |
第二步:創建nginx.service文件,并編輯
1
|
# vim nginx.service |
內如如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[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
保存退出。
第三步:加入開機自啟動
1
|
# systemctl enable nginx |
如果不想開機自啟動了,可以使用下面的命令取消開機自啟動
1
|
# systemctl disable nginx |
第四步:服務的啟動/停止/刷新配置文件/查看狀態
1
2
3
4
5
6
7
|
# 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 即可。
1
|
# 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/
1
|
# mkdir /var/run/nginx -p |
第三步:啟動nginx服務
1
|
# /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文件夾
1
|
# mkdir /usr/ local /nginx/logs |
第三步:把/var/run/nginx/目錄下的nginx.pid這個文件拷貝到第二步創建的logs文件夾里面。
1
|
# cp nginx.pid /usr/ local /nginx/logs/ |
第四步:把logs這個文件夾在conf下也拷貝一份
1
|
# cp -r logs conf |
第五步:修改權限/usr/local/nginx/logs/目錄下面的nginx.pid文件的權限。
1
|
[root@iz2logs]# chmod 755 nginx.pid |
第六步:重啟reboot
1
|
# reboot |
第六步:啟動nginx
1
|
# /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 ;
第二步:保證肯定有這個路徑,可以直接創建一下這個配置的目錄
1
|
# mkdir -p /var/log/nginx/ |
第三步:刷新配置文件
1
|
# /usr/ local /nginx/sbin/nginx -s reload |
總結
到此這篇關于nginx安裝以及配置的文章就介紹到這了,更多相關nginx安裝及配置內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/lywJ/p/10710361.html