Nginx是一款高性能的http 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器。html
由俄羅斯的程序設計師Igor Sysoev所開發,官方測試nginx可以支支撐5萬併發連接,linux
而且cpu、內存等資源消耗卻很是低,運行很是穩定。nginx
一、http服務器。Nginx是一個http服務能夠獨立提供http服務。能夠作網頁靜態服務器。c++
二、虛擬主機。能夠實如今一臺服務器虛擬出多個網站。例如我的網站使用的虛擬主機。正則表達式
三、反向代理,負載均衡。當網站的訪問量達到必定程度後,單臺服務器不能知足用戶的請求時,算法
須要用多臺服務器集羣可使用nginx作反向代理。而且多臺服務器能夠平均分擔負載,vim
不會由於某臺服務器負載高宕機而某臺服務器閒置的狀況。centos
官方網址:http://nginx.org/en/download.html瀏覽器
官網提供三種版本:tomcat
Nginx官網提供了三個類型的版本
Mainline version:Mainline 是 Nginx 目前主力在作的版本,能夠說是開發版
Stable version:最新穩定版,生產環境上建議使用的版本
Legacy versions:遺留的老版本的穩定版
咱們這裏下載的是Stable version下面的
使用的版本是1.14.0.tar.gz.
下面的環境須要視本身的系統狀況而定,沒有的環境安裝如下就好。
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
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裏面只執行文件。
進入sbin目錄,執行命令./nginx
[root@admin sbin]# ./nginx
[root@admin sbin]# ps -aux | grep nginx
ps命令用於報告當前系統的進程狀態。
-a:顯示全部終端機下執行的程序,除了階段做業領導者以外。
a:顯示現行終端機下的全部程序,包括其餘用戶的程序。
u:以用戶爲主的格式來顯示程序情況。
x:顯示全部程序,不以終端機來區分。
[root@admin sbin]# ./nginx -s stop
或者
[root@admin sbin]# ./nginx -s quit
先關閉,而後啓動
[root@admin sbin]# ./nginx -s reload
首先須要關閉防火牆:默認端口是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
特殊:針對阿里雲
須要添加安全組規則
就是在一臺服務器啓動多個網站。
如何區分不一樣的網站:主要有如下兩種方式
方式一:端口不一樣
方式二:域名不一樣
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
域名就是網站: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域名解析器查找。
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
反向代理服務器決定那臺服務器提供服務
兩個域名指向同一臺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
若是一個服務由多個服務器提供,須要把負載分配到不一樣的服務器處理,須要負載均衡。
能夠根據服務器的實際狀況調整服務器權重。權重越高分配的請求越多,權重越低,請求越少。默認是都是1
每次啓動nginx服務都須要到安裝目錄下的/sbin下面,感受挺麻煩的。
下面介紹一下如何在Linux(CentOS)系統上,設置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 刷新配置文件
上面的方法完成了用腳本管理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
第一步:進入到/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 中止開機自啓動
直接按照提示執行命令systemctl daemon-reload 便可。
# systemctl daemon-reload
以前在虛擬機centos6.5上面設置自啓動以後,從新啓動系統能夠正常啓動,也不會出錯。
centos6.5的自啓動設置見16部分知識點。
可是在centos7.4(阿里雲上面),參照第17部分配置好了自啓動。重啓系統發現nginx並無自啓動
使用命名systemctl status nginx查看了一下狀態,內容以下:
而後我直接進入/usr/local/nginx/sbin目錄下面,執行./nginx,出現了下面的錯誤提示:
從這兩個提示信息,能夠大概看出告訴咱們的就是找不到/var/run/nginx/目錄下面的nginx.pid文件。
第一步:進入 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
能夠查看一下是否成功啓動了
[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;
第一步:進入 cd /usr/local/nginx/conf/ 目錄,編輯配置文件nginx.conf ;
第二步:保證確定有這個路徑,能夠直接建立一下這個配置的目錄
# mkdir -p /var/log/nginx/
第三步:刷新配置文件
# /usr/local/nginx/sbin/nginx -s reload