1. 程式人生 > >Nginx Web 服務詳解

Nginx Web 服務詳解

並發連接 信息 listen add lock keepalive efi html erl

一、初識Nginx軟件
Nginx是一款非常優秀的web服務軟件,不但可以做web服務軟件,還可以做反向代理負載均衡和前端業務的緩存服務
  1. 作為web服務軟件
    Nginx是一個支持高性能高並發的web服務軟件,它具有很多優秀的特性,作為web服務器與apache相比nginx可以支持更多的並發連接訪問,但占用的資源卻更少,效率更高,在功能上也強大了許多
  2. 作為反向代理或負載均衡服務
    在反向代理或負載均衡反面nginx可以作為web服務、php等動態服務及Memcached緩存代理服務,它具有類似專業反向代理軟件(如haproxy)的功能,同時也是一個優秀的郵件代理服務軟件
  3. 作為前端業務數據緩存服務
    在web緩存服務方面,nginx可以通過自身的proxy_cache模塊實現類似squid等專業緩存軟件的功能
    Nginx這三大功能是目前公司使用比較多的,特別是前兩個功能
    下面對nginx作為web服務器進行舉例說明

    二、作為web服務軟件

    (一)nginx web服務應用的場景

  • 使用nginx運行html,js,css小圖片等靜態數據
  • nginx結合FastCGI運行php動態程序(fastcgi_pass)
  • Nginx結合tomcat/Resin等支持java動態程序(常用proxy_pass)

    (二) nginx 軟件安裝

    1、安裝ngix所需要的依賴包

    [root@jiangjunwang ~]# yum install -y pcre-devel openssl-devel
    說明:pcre-devel: perl語言正則表達式兼容軟件包、openssl-devel:使系統支持https方式訪問

    2、創建一個管理nginx進程的虛擬用戶

    [root@jiangjunwang ~]# useradd www -s /sbin/nologin/ -M

    3、下載並解壓nginx軟件

    [root@jiangjunwang ~]# mkdir /server/tools -p
    [root@jiangjunwang ~]# cd /server/tools/
    [root@jiangjunwang tools]# wget http://nginx.org/download/nginx-1.12.2.tar.gz
    [root@jiangjunwang tools]# tar xf nginx-1.12.2.tar.gz

    4、編譯nginx軟件

[root@jiangjunwang nginx-1.12.2]# ./configure --prefix=/application/nginx-12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
說明:

  • --with-http_ssl_module ??使nginx程序可以支持HTTPsF訪問功能??
  • --with-http_stub_status_module ??用於監控用戶訪問nginx服務情況

[root@jiangjunwang nginx-1.12.2]# make && make install

5、創建軟連接

[root@jiangjunwang nginx-1.12.2]# ln -s /application/nginx-12.2 /application/nginx

6、啟動nginx

[root@jiangjunwang nginx-1.12.2]# /application/nginx/sbin/nginx

7、訪問測試

技術分享圖片

出現以上界面表示nginx安裝成功建議使用谷歌瀏覽器進行訪問

(三)、利用nginx配置基於域名的虛擬主機

簡化配置文件
[root@jiangjunwang conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf
b
sed -n ‘10,21p‘ nginx.conf>../conf/extra/www.conf
編輯主配置文件

[root@jiangjunwang conf]# vim /application/nginx/conf/nginx.conf

worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include extra/www.conf;
include extra/bbs.conf;
}

編輯虛擬機配置文件

[root@jiangjunwang html]# vim /application/nginx/conf/extra/bbs.conf

server {
listen 80;
server_name bbs.av.org;
location / {
root html/bbs;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

[root@jiangjunwang html]# vim /application/nginx/conf/extra/www.conf

server {
listen 80;
server_name www.av.org;
location / {
root html/www;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

編寫測試index.html文件

[root@jiangjunwang html]# echo "bbs.av.org">/application/nginx/html/bbs/index.html
[root@jiangjunwang html]# echo "www.av.org">/application/nginx/html/www/index.html

檢查配置文件語法並重啟服務

[root@jiangjunwang html]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-12.2/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-12.2/conf/nginx.conf test is successful
[root@jiangjunwang html]# /application/nginx/sbin/nginx -s reload

**編寫本機hosts文件並測試
技術分享圖片
技術分享圖片

看到如上效果表示一個基於域名的nginx虛擬主機配置完成

(四)配置主機的別名

所謂主機別名就是讓一個IP地址對應多個域名主機,這也是在實際應用中常用的功能
配置方法接著上邊的配置我們以bbs.av.com站點為例配置一個別名為bbs.a.com

[root@jiangjunwang extra]# vim bbs.conf

server {
listen 80;
server_name bbs.av.org bbs.a.com;
location / {
root html/bbs;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

然後重啟nginx進行訪問測試即可

(五)、nginx日誌配置實例

1、錯誤日誌

  • error_log的默認值為
    default:error_log logs/error.log error;
  • 可放置的標簽段為
    context:main、http、server、location
  • 配置實例 編輯主配置文件添加error_log行即可

    [root@jiangjunwang conf]# cat nginx.conf
    worker_processes 1;
    error_log logs/error.log error;
    events {
    worker_connections 1024;
    }
    http {
    include mime.types;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;
    include extra/www.conf;
    include extra/bbs.conf;
    }

2、訪問日誌

  • 默認配置access_log/acess.log combined;
  • 可放置的位置為 http、server、location、if inlocation 、limit_except;
    配置實例: 這裏我們已剛才配置的bbs站點為例,生成一個bbs.access.log日誌文件

編輯主配置文件先定義一個log_format日誌格式的參數

[root@jiangjunwang conf]# vim nginx.conf

worker_processes 1;
error_log logs/error.log error;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
include extra/www.conf;
include extra/bbs.conf;
}

然後編輯bbs站點目錄文件使其使用主配置文件定義的格式生成相應站點的訪問日誌

[root@jiangjunwang extra]# vim bbs.conf

server {

listen       80;

server_name bbs.av.org bbs.a.com;
location / {
root html/bbs;
index index.html index.htm;
}
access_log logs/bbs.access.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
最後檢查語法重啟nginx服務即可

3、access日誌切割

在實際生產環境中access日誌會逐漸變大,等大到一定程度的時候會打不開這個日誌文件,所以需要我們定期的對日誌文件進行切割

[root@jiangjunwang logs]# vim /server/scripts/cut_access.sh

#!/bin/bash

data_info=$(date +%F-%H:%M)

mv /application/nginx/logs/bbs.access.log /application/nginx/logs/access.log.$data_info
/application/nginx/sbin/nginx -s reload

#cut nginx log cron
00 00 * * * /bin/sh /server/scripts/cut_log.sh &>/dev/null

(六)、location區塊

location 指令的作用是根據用戶請求的uri來執行不同的應用或者炒作
location基本的語法為

  • location [ = | ~ | ~* | ^~ ] uri { ... }

= --- 精確匹配網站uri資源信息
~ --- 區分大小寫匹配網站uri資源信息
~* --- 不區分大小寫匹配網站uri資源信息
^~ --- 優先匹配網站uri資源信息
/AV/ --- 指定匹配網站資源目錄信息
/ --- 默認匹配網站資源信息
! --- 對匹配的內容進行取反

  • 一個栗子
    需求:內網用戶可以訪問www站點AV目錄而外網用戶不能訪問
    編寫www站點文件

    [root@jiangjunwang extra]# vim www.conf

    server {
    listen 80;
    server_name www.av.org;
    root html/www;
    index index.html index.htm;
    location /AV {
    allow 172.16.1.0/24;
    deny 10.0.0.0/24;
    }
    }
    [root@jiangjunwang www]# echo "AV info" >AV/oldboy.html
    檢查語法重啟nginx服務分別用內網172網段和外網10網段訪問測試即可

(七)、Nginx rewrite區塊

Nginx rewrite主要的功能就是實現URL地址重寫,Nginx rewrite需要pcre軟件的支持,通過prel兼容的正則表達式語法進行規則匹配;
一個栗子
通過rewrite模塊實現訪問av.org自動跳轉到bbs.av.org
編輯bbs站點配置文件
方法一

[root@jiangjunwang extra]# vim bbs.conf

server {
listen 80;
server_name av.org;
root html/bbs;
index index.html index.html;
rewrite ^/(.*) http://bbs.av.org/$1 permanent;

}

server {

 listen       80;

server_name bbs.av.org bbs.a.com;
location / {
root html/bbs;
index index.html index.htm;
}
access_log logs/bbs.access.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;

}
}

然後檢查語法重啟nginx服務即可

方法二
通過location區塊和rewrite結合實現

[root@jiangjunwang extra]# vim bbs.conf

server {

listen       80;

server_name bbs.av.org bbs.a.com;
location / {
root html/bbs;
index index.html index.htm;
if ($host ~ "^av.org$") {
rewrite ^/(.
) http://bbs.bbs.org/$1 permanent;
}
access_log logs/bbs.access.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;

  }

}
}
~
然後檢查語法重啟nginx服務即可

Nginx Web 服務詳解