文章目錄
前言
- 在各種網站服務器軟件中,除了Apache HTTP Server外,還有一款輕量級的HTTP服務器軟件–Nginx,其穩定,高效的特性逐漸被越來越多的用戶認可
- 其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名
- 其特點是:佔有內存少,併發能力強
- 中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
一:Nginx服務基礎
1.1:Nginx概述
-
一款高性能、輕量級Web服務軟件
●穩定性高
●系統資源消耗低
●對HTTP併發連接的處理能力高
●單臺物理服務器可支持30 000 ~ 50000個併發請求
●佔用內存少,併發能力強
1.2:Nginx編譯安裝(過程)
-
安裝支持軟件
[root@localhost ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel
-
創建運行用戶、組
[root@localhost ~]# useradd -M -S /sbin/nologin nginx '//-M 不創建家目錄'
-
編譯安裝Nginx
-
先mount.cifs掛載宿主機中的nginx軟件包文件夾 [root@localhost ~]# tar zxvf nginx-1.12.2.tar.gz [root@localhost ~]# cd nginx-1.12.0 [root@localhost nginx-1.12.0]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_ status_ module '//開啓stub_status狀態統計模塊' [root@localhost nginx-1.12.0]# make && make install [root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin '//nginx命令執行路徑優化' [root@locaThost nginx-1.12.0]# ls -l /usr/local/sbin/nginx Irwxrwxrwx 1root root27 5月16 16:50 /usr/local/sbin/nginx ->/usr/local/nginx/sbin/nginx
1.3:運行控制(實驗過程)
-
檢查配置文件
[root@localhost ~]# nginx -t '//檢查'
-
啓動、重載配置、停止Nginx
[root@localhost ~]# nginx '//啓動' [root@localhost ~]# netstat -anpt | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7180/nginx: master [root@localhost ~]# yum -y install elinks [root@localhost ~]# elinks http://localhost '//顯示"Welcome to nginx!"頁面,表明Nginx服務已經正常運行' [root@localhost ~]# killall -s HUP nginx '//-S選項指定信號種類,HUP信號表示重載配置' [root@localhost ~]# killall -s QUIT nginx '//QUIT信號表示退出進程'
-
Nginx添加爲系統服務
-
第一種方法,使用systemctl工具進行管理
-
[root@localhost ~]# vim /lib/systemd/system/nginx.service '//添加使用systemctl工具進行管理' [Unit] Description=nginx '//描述' After=network.target '//描述服務類別' [Service] Type=forking '//後臺運行形勢' PIDFile =/usr/local/nginx/logs/nginx.pid '//PID文件位置' ExecStart=/usr/local/nginx/sbin/nginx '//啓動服務' ExecReload=/usr/bin/kill -S HUP $MAINPID '//根據PID重載配置' ExecStop=/usr/bin/kill -S QUIT $MAINPID '//根據PID終止進程' PrivateTmp=true [Install] WantedBy=multi-user.target [root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
第二種方法,添加使用service工具進行管理
[root@localhost ~]# cd /etc/inid.d '//或者添加使用service工具進行管理' [root@localhost init.d]# ls [root@localhost init.d]# vim nginx #!/bin/bash # chkconfig: - 99 20 # description: Nginx Service Control Script PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $PROG ;; stop) kill -s QUIT $(cat $PIDF) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0 [root@localhost init.d]# chmod +x nginx [root@localhost init.d]# chkconfig --add nginx [root@localhost init.d]# chkconfig --level 35 nginx on
-
此時,開啓服務,關閉防火牆,就可以訪問nginx網址了
[root@localhost init.d]# service nginx start [root@localhost init.d]# systemctl stop firewalld [root@localhost init.d]# setenforce 0 [root@localhost init.d]# netstat -ntap | grep nginx
1.4:配置文件nginx.conf
-
全局配置
#user nobody; worker_ processes 1; #error_ log logs/error.log; #pid logs/nginx.pid;
-
1/O時間配置
events { use epoll; worker connections 4096; }
-
HTTP配置
http { .... access_log logs/access.log main; sendfile on; ... keepalive_ _timeout 65; server { listen 80; server name localhost; charset utf-8; location / { root html; index index.html index.php; } error_ page 500 502 503 504 /50x.html; location = /50x.html { root html; }} }
1.5:Nginx的訪問狀態統計(實驗過程)
-
啓用HTTP_ STUB_ STATUS狀態統計模塊
配置編譯參數時添加–with-http stub status module
nginx -V查看已安裝的Nginx是否包含HTTP_ STUB _STATUS模塊
[root@localhost ~]# nginx -V nginx version: nginx/1.12.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) configure arguments: --prefix=/usr/local/nginx --user=nginx -- group= nginx --with-http_ stub_ status_ module
-
修改nginx.conf配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf http{ server { listen 80; server name localhost; charset utf-8; location / { root html; index index.html index.php; } location ~/status { '//添加此段' stub_ status on; access_ log off; } } }
-
查看當前的狀態統計信息
二:Nginx訪問控制
2.1:基於授權的訪問控制
-
配置步驟與Apache基本一致
●生成用戶密碼認證文件
●修改主配置文件對相應目錄,添加認證配置項
●重啓服務,訪問測試
-
生成用戶密碼認證文件
[root@localhost ~]# yum install -y httpd-tools '//因爲沒有htpasswd工具,所以需要安裝' [root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db test New password: Re-type new password: Adding password for user test root@localhost ~]# cat /usr/local/nginx/ passwd.db test:$apr1$x.UaSXIM$RRLa2KJcKwsGBVsikGcrR/
-
修改主配置文件對相應目錄,添加認證配置項
[root@localhost ~]# chmod 400 /usr/local/nginx/passwd.db [root@localhost ~]# chown nginx /usr/local/nginx/passwd.db [root@localhost ~]# ll -d /usr/local/nginx/passwd.db -r------- 1 nginx root43 5月16 22:26 /usr/local/nginx/passwd.db
-
重啓服務,訪問測試
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf server { location / { auth_basic "secret"; auth_basic_user_file /usr/local/nginx/passwd.db; }
-
此時訪問網頁會要求輸入賬號密碼
2.2:基於客戶端的訪問控制
-
通過客戶端IP地址,決定是否允許對頁面訪問
-
配置規則
deny IP/IP段:拒絕某個IP或IP段的客戶端訪問
allow IP/IP段:允許某個IP或IP段的客戶端訪問
規則從上往下執行,如匹配則停止,不再往下匹配
-
配置步驟
-
修改主配置文件nginx.conf,添加相應配置項
。除主機192.168.195.128之外允許其他客戶端訪問
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf server { location/ { deny 192.168.195.128; allow all; }
-
訪問測試,會報錯403
-
三:Nginx虛擬主機
3.1:Nginx虛擬主機應用
-
Nginx支持的虛擬主機有三種
●基於域名的虛擬主機
●基於IP的虛擬主機
●基於端口的虛擬主機
-
通過"server{}" 配置段實現
3.2:基於域名的虛擬Web主機
-
配置步驟
●準備網站目錄及測試文件
[root@localhost ~]# mkdir -p /var/www/html/erbao/ [root@localhost ~]# mkdir -p /var/www/html/sanbao/ [root@localhost ~]# echo "this is erbao" >> /var/www/html/erbao/index.html [root@localhost ~]# echo "this is sanbao" >> /var/www/html/sanbao/index.html [root@localhost ~]# yum install bind -y '//以下是配置DNS服務過程,具體內容不再贅述,如果不懂,翻閱我之前博客' [root@localhost ~]# vim /etc/named.conf [root@localhost ~]# vim /etc/named.rfc1912.zones [root@localhost ~]# cp -p /var/named/named.localhost /var/named/erbao.com.zone [root@localhost ~]# vim /var/named/erbao.com.zone [root@localhost ~]# cp -p /var/named/erbao.com.zone /var/named/sanbao.com.zone [root@localhost ~]# systemctl start named
●調整nginx.conf配置文件
server { listen 80; server name www.erbao.com; charset utf-8; access_log logs/www.erbao.access.log; location/ { root /var/www/html/btcom; ...... }
-
這個簡單,和通過域名訪問即可
3.3:基於端口的虛擬web主機
-
配置步驟
修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 192.168.9.158:6666; server name 192.1 68.9.1 58:6666; ......} server { listen 192.1 68.9.158:8888; server name 192.1 68.9.158:8888; ......}
3.4:基於IP的虛擬web主機
-
配置步驟
主機配置兩個IP地址
修改配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf server { listen 192.168.9.1 58:80; server name 192.168.9.158:80; ....} server { listen 192.168.9.1 10:80; server name 192.168.9.110:80; ....}
ver {
listen 192.1 68.9.158:8888;
server name 192.1 68.9.158:8888;
…}
### 3.4:基於IP的虛擬web主機
- 配置步驟
主機配置兩個IP地址
修改配置文件
```css
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 192.168.9.1 58:80;
server name 192.168.9.158:80;
....}
server {
listen 192.168.9.1 10:80;
server name 192.168.9.110:80;
....}