Nginx優化之虛擬主機

前言

  • 在各種網站服務器軟件中,除了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
    

    mark

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;
            }
        }
    }
    
  • 查看當前的狀態統計信息

    mark

二: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;
    	}
    
  • 此時訪問網頁會要求輸入賬號密碼

  • mark

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

      mark

三: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;
	....}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章