Nginx介紹及Web服務相關配置

Nginx 是一個高性能的Web和反向代理服務器, 它具有有很多非常優越的特性:作為 Web 服務器:相比Apache,Nginx 使用更少的資源,支持更多的并發連接,體現更高的效率,這點使 Nginx尤其受到虛擬主機提供商的歡迎。

本節索引:

一、Nginx介紹

二、Nginx服務配置

三、Web服務常見功能及配置

 

一、Nginx介紹

Nginx:engine X ,2002年,開源,商業版

Nginx是免費,開源,高性能的HTTP和反向代理服務器,郵件代理服務器,通

用TCP/UDP代理服務器

解決C10K問題(10K Connections)

官網:http://nginx.org

二次開發版:

Tengine, OpenResty(章亦春)

 

特性:

模塊化設計,較好的擴展性

高可靠性

支持熱部署:不停機更新配置文件,升級版本,更換日志文件

低內存消耗:10000個keep-alive連接模式下的非活動連接,僅需2.5M內存

event-driven,aio,mmap,sendfile

 

基本功能:

靜態資源的web服務器

http協議反向代理服務器

pop3/imap4協議反向代理服務器

FastCGI(LNMP),uWSGI(python)等協議

模塊化(非DSO),如zip,SSL模塊

 

web服務相關的功能:

虛擬主機(server)

支持 keep-alive 和管道連接

訪問日志(支持基于日志緩沖提高其性能)

url rewirte

路徑別名

基于IP及用戶的訪問控制

支持速率限制及并發數限制

重新配置和在線升級而無須中斷客戶的工作進程

Memcached的GET 接口

 

為什么選擇Nginx?

Nginx 是一個高性能的Web和反向代理服務器, 它具有有很多非常優越的特性:作為 Web 服務器:相比

Apache,Nginx 使用更少的資源,支持更多的并發連接,體現更高的效率,這點使 Nginx尤其受到虛擬主

機提供商的歡迎。能夠支持50000個并發連接數的響應,Nginx選擇了epoll作為開發模型.

作為負載均衡服務器:Nginx 既可以在內部直接支持Rails 和 PHP,也可以支持作為 HTTP代理服務器 對

外進行服務。Nginx 用 C 編寫, 不論是系統資源開銷還是 CPU 使用效率都比Perlbal 要好的多。

作為郵件代理服務器: Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是

作為郵件代理服務器),Last.fm 描述了成功并且美妙的使用經驗。

Nginx 安裝非常的簡單,配置文件 非常簡潔(還能夠支持perl語法),Bugs非常少的服務器:Nginx 啟動特

別容易,并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠在 不間斷服務

的情況下進行軟件版本的升級。

 

Nginx程序架構

nginx架構

Nginx程序架構:

master/worker結構

一個master進程:

負載加載和分析配置文件、管理worker進程、平滑升級

一個或多個worker進程

處理并響應用戶請求

緩存相關的進程:

cache loader:載入緩存對象

cache manager:管理緩存對象

 

高度模塊化

nginx高度模塊化,但其模塊早期不支持DSO機制;1.9.11版本支持動態裝載和

卸載

模塊分類:

核心模塊:core module

標準模塊:

HTTP 模塊: ngx_http_*

HTTP Core modules 默認功能

HTTP Optional modules 需編譯時指定

Mail 模塊 ngx_mail_*

Stream 模塊 ngx_stream_*

第三方模塊

 

二、Nginx服務配置

配置文件的組成部分:

主配置文件:nginx.conf

子配置文件:include conf.d/*.conf

fastcgi, uwsgi,scgi等協議相關的配置文件

mime.types:支持的mime類型

主配置文件的配置指令:

directive value [value2 …];

注意:

(1) 指令必須以分號結尾

(2) 支持使用配置變量

內建變量:由Nginx模塊引入,可直接引用

自定義變量:由用戶使用set命令定義

set variable_name value;

引用變量:$variable_name

 

主配置文件結構:

主配置文件結構:四部分組成

main block:主配置段,即全局配置段,對http,mail都有效

event {

} ????????#事件驅動相關的配置

http {

} ????????#http/https協議相關配置段

mail {

} ????????#mail協議相關配置段

stream {

}???????? # stream服務器相關配置段

 

 

 

http協議相關的配置結構

http配置結構

 

 

三、Web服務常見功能及配置

(一)性能優化相關的配置:

1、worker_processes number | auto

worker進程的數量;通常應該為當前主機的cpu的物理核心數

2、worker_cpu_affinity cpumask …

worker_cpu_affinity auto [cpumask] 提高緩存命中率

CPU MASK: 00000001:0號CPU

00000010:1號CPU

10000000:8號CPU

worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity 0101 1010;

3、worker_priority number

指定worker進程的nice值,設定worker進程優先級:[-20,20]

4、worker_rlimit_nofile number

worker進程所能夠打開的文件數量上限,如65535

示例:修改worker進程數量

1

2

示例:設置NICE優先級

3

45

?

變為前臺執行

daemon on|off

是否以守護進程方式運行nignx,默認是守護進程方式,用于測試環境

6

以守護方式(前臺執行)運行

7

EVENT語句塊

每個worker支持的最大連接1024,生成環境應適當調大

work_connections *Cpu個數= worker_rlimit_nofile number

?8

?

(二)虛擬主機配置

定義一個專門存放虛擬主機的目錄:

10

配置一個虛擬主機

server {

listen address[:PORT]|PORT;

server_name SERVER_NAME;

root /PATH/TO/DOCUMENT_ROOT;

}

vim a.com.conf

11

vim b.com.conf

server {

???????? ?? listen 8080

???????? ?? server_name www.b.com

}

1213

?

?

(三)改變默認指向:default_server

vim c.com.conf

14

要注意將主配置文件中的defaults_server刪掉,否則nginx服務將無法正常啟動

?15

?

?

?(四)支持通配符寫法

?16

17

匹配優先級機制從高到低:

(1) 首先是字符串精確匹配 如:www.magedu.com

(2) 左側*通配符 如:*.magedu.com

(3) 右側*通配符 如:www.magedu.*

(4) 正則表達式 如: ~^.*\.magedu\.com$

(5) default_server

?

?

(五)隱藏Nginx版本

server_tokens on | off | build | string

是否在響應報文的Server首部顯示nginx版本

18

vim /etc/nginx/conf/nginx.conf

19

再次訪問

20

?

?(五)軟連接指向

?21

22

?

?(六)針對特定文件指定存放位置

location [ = | ~ | ~* | ^~ ] uri { … }

location @name { … }

在一個server中location配置段可存在多個,用于實現從uri到文件系統的路

徑映射;ngnix會根據用戶請求的URI來檢查定義的所有location,并找出一個最

佳匹配,而后應用其配置

示例:

server {…

server_name www.magedu.com;

location /images/ {

root /data/imgs/;

}

}

http://www.magedu.com/images/logo.jpg

–> /data/imgs/images/logo.jpg

?

示例:

?2324

?

?

(七)定制錯誤頁面

echo ‘<h1>NO FOUND PAGE</h1>’ > /data/sitea/error/404.html

25

客戶端訪問測試:

?26

27

?

?

?(八)避免流氓瀏覽器404劫持

error_page code … [=[response]] uri;

模塊ngx_http_core_module

定義錯誤頁,以指定的響應狀態碼進行響應

可用位置:http, server, location, if in

location

error_page 404 /404.html

error_page 404 =200 /404.html

28

修改配置文件

29

再次訪問:

30

修改404頁面到指定默認頁面

?31

 

keepalive_timeout timeout [header_timeout];

設定保持連接超時時長,0表示禁止長連接,默認為75s

?

keepalive_requests number;

在一次長連接上所允許請求的資源的最大數量

默認為100

?

?

(九)除了管理員域其他主機無法使用GET以外的其他方法

32

 

?

?

(十)實現基于ip的訪問控制功能

ngx_http_access_module模塊

1、allow address | CIDR | unix: | all;

2、deny address | CIDR | unix: | all;

http, server, location, limit_except

自上而下檢查,一旦匹配,將生效,條件嚴格的置前

示例:

location / {

deny 192.168.1.1;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

allow 2001:0db8::/32;

deny all;

}

?33

?

?

(十一)實現基于用戶的訪問控制:

ngx_http_auth_basic_module模塊

實現基于用戶的訪問控制,使用basic機制進行用戶認證

1、auth_basic string | off;

2、auth_basic_user_file file;

location /admin/ {

auth_basic “Admin Area”;

auth_basic_user_file /etc/nginx/.ngxpasswd;

}

用戶口令文件:

1、明文文本:格式name:password:comment

2、加密文本:由htpasswd命令實現

httpd-tools所提供

?

示例:

cd /etc/nginx/conf.d/vhost

htpasswd -cm nginxuser httpuser1

htpasswd -m nginxuser httpuser2

修改配置

 

針對整個網站生效

34

針對特定目錄生效

35

http://www.a.com/admin/

36

?

?

?

(十二)Nginx狀態頁

ngx_http_stub_status_module模塊

功能:用于輸出nginx的基本狀態信息

輸出信息示例:

Active connections: 291

server accepts handled requests

16630948 16630948 31070465

上面三個數字分別對應accepts,handled,requests三個值

Reading: 6 Writing: 179 Waiting: 106

示例:

37

瀏覽器訪問http://192.168.30.10/status

38

相關參數說明:

Active connections:當前狀態,活動狀態的連接數

accepts:統計總值,已經接受的客戶端請求的總數

handled:統計總值,已經處理完成的客戶端請求的總數

requests:統計總值,客戶端發來的總的請求數

Reading:當前狀態,正在讀取客戶端請求報文首部的連接的連接數

Writing:當前狀態,正在向客戶端發送響應報文過程中的連接數

Waiting:當前狀態,正在等待客戶端發出請求的空閑連接數

 

 

(十三)日志相關設置

ngx_http_log_module模塊

指定日志格式記錄請求

1、log_format name string …;

string可以使用nginx核心模塊及其它模塊內嵌的變量

2、access_log path [format [buffer=size] [gzip[=level]] [flush=time]

[if=condition]];

access_log off;

訪問日志文件路徑,格式及相關的緩沖的配置

buffer=size

flush=time

3、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

緩存各日志文件相關的元數據信息

max:緩存的最大文件描述符數量

min_uses:在inactive指定的時長內訪問大于等于此值方可被當作活動項

inactive:非活動時長

valid:驗證緩存中各緩存項是否為活動項的時間間隔

 

示例:自定義日志

系統默認:

39

自定義一個日志:

40

添加到access_log(可添加到任何語句塊中)

41

測試日志

42

 

 

(十四)實現NginxSSL加密https

ngx_http_ssl_module模塊:

1、ssl on | off;

為指定虛擬機啟用HTTPS protocol, 建議用listen指令代替

2、ssl_certificate file;

當前虛擬主機使用PEM格式的證書文件

3、ssl_certificate_key file;

當前虛擬主機上與其證書匹配的私鑰文件

4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];支持ssl協議版本,默

認為后三個

5、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

none: 通知客戶端支持ssl session cache,但實際不支持

builtin[:size]:使用OpenSSL內建緩存,為每worker進程私有

[shared:name:size]:在各worker之間使用一個共享的緩存

6、ssl_session_timeout time;

客戶端連接可以復用ssl session cache中緩存的ssl參數的有效時長,默認5m

示例:

server {

listen 443 ssl;

server_name www.magedu.com;

root /vhosts/ssl/htdocs;

ssl on;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

ssl_session_cache shared:sslcache:20m;

ssl_session_timeout 10m;

}

43

檢查語法:

nginx -t

44

驗證https

45

 

 

 

(十五)實現NGINX搭建多個HTTPS網站

46

修改配置文件

47

驗證https:

48

 

 

(十六)rewite重寫

ngx_http_rewrite_module模塊:

The ngx_http_rewrite_module module is used to change request URI

using PCRE regular expressions, return redirects, and conditionally select

configurations.

將用戶請求的URI基于PCRE regex所描述的模式進行檢查,而后完成重定向替換

1、rewrite regex replacement [flag]

將用戶請求的URI基于regex所描述的模式進行檢查,匹配到時將其替換為

replacement指定的新的URI

注意:如果在同一級配置塊中存在多個rewrite規則,那么會自下而下逐個

檢查;被某條件規則替換完成后,會重新一輪的替換檢查

隱含有循環機制,但不超過10次;如果超過,提示500響應碼,[flag]所表示

的標志位用于控制此循環機制

如果replacement是以http://或https://開頭,則替換結果會直接以重向返

回給客戶端, 即永久重定向301

 

[flag]

last:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,

而后對新的URI啟動新一輪重寫檢查;提前重啟新一輪循環,不建議在location中

使用

break:重寫完成后停止對當前URI在當前location中后續的其它重寫操作,

而后直接跳轉至重寫規則配置塊之后的其它配置;結束循環,建議在location中使

redirect:臨時重定向,重寫完成后以臨時重定向方式直接返回重寫后生成

的新URI給客戶端,由客戶端重新發起請求;使用相對路徑,或者http://或https://

開頭,狀態碼:302

permanent:?重寫完成后以永久重定向方式直接返回重寫后生成的新URI給

客戶端,由客戶端重新發起請求,狀態碼:301

2return

return code [text];

return code URL;

return URL;

停止處理,并返回給客戶端指定的響應碼

3、rewrite_log on | off;

是否開啟重寫日志, 發送至error_log(notice level)

4、set $variable value;

用戶自定義變量

注意:變量定義和調用都要以$開頭

5、if (condition) { … }

條件滿足時,執行配置塊中的配置指令;server, location

condition:

比較操作符:

= 相同 != 不同

~:模式匹配,區分字符大小寫

~*:模式匹配,不區分字符大小寫

!~:模式不匹配,區分字符大小寫

!~*:模式不匹配,不區分字符大小寫

文件及目錄存在性判斷:

-e, !-e 存在(包括文件,目錄,軟鏈接)

-f, !-f 文件 -d, !-d 目錄 -x, !-x 執行

 

?

示例:

www.a.com/images/a.jpg? –>? www.a.com/media/images/a.jpg

相關配置:

rewrite? ^(images/.*)$? /media/$1

 

示例:

www.a.com/bbs? –>? www.a.com/forum

495051

redirect模式:302

5253

permanent模式

5455

 

 

(十七)實現http自動跳轉https

565758

 

 

(十八)實現將httphttps寫入同一個虛擬機

596061

break模式:可避免死循環

62

 

(十九)實現自定義響應碼

6364

 

 

(二十)Nginx防盜鏈

ngx_http_referer_module模塊:

功能:用來阻止Referer首部無有效值的請求訪問,可防止盜鏈

格式:valid_referers none|blocked|server_names|string …;

定義referer首部的合法可用值,不能匹配的將是非法值

none:請求報文首部沒有referer首部

blocked:請求報文有referer首部,但無有效值

server_names:參數,其可以有值作為主機名或主機名模式

arbitrary_string:任意字符串,但可使用*作通配符

regular expression:被指定的正則表達式模式匹配到的字符串,要使用~開頭

65

開啟防盜鏈功能后,盜鏈圖片將無法正常顯示

66

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/102626

(0)
wangxczwangxcz
上一篇 2018-07-09
下一篇 2018-07-11

相關推薦

  • 文本三劍客之sed

    簡要概括sed

    Linux筆記 2018-04-29
  • 第十一周作業

    1、搭建php-fpm工作方式的LAMP環境,實現wordpress正常訪問 1、 先安裝數據庫mariadb [root@bogon ~]# yum install mariadb-service 配置數據庫主文件 [root@bogon ~]# vim /etc/my.cnf.d/server.cnf 啟動數據庫 [root@bogon ~]# syst…

    Linux筆記 2018-06-10
  • LVS-NAT與LVS-DR模型實戰

    LVS-NAT、LVS-DR實驗

    2018-06-24
  • vim的使用方法

    從命令模式到插入模式的幾種方法 i 光標不移動 I 光標移動到光標所在行首 a 光標往后移動一個字符 A 光標移動到光標所在行尾 o 光標所在行下新增一行 O 光標所在行上新增一行 擴展模式: :q 退出 :q! 強制退出,丟棄做出的修改 :wq 保存退出 :x 保存退出 :wq! 對只讀文件強行修改保存? :r file 把文件內容讀入到當前文件中 :w …

    Linux筆記 2018-08-05
  • nginx實現請求轉發

    反向代理適用于很多場合,負載均衡是最普遍的用法。 nginx?作為目前最流行的web服務器之一,可以很方便地實現反向代理。 nginx?反向代理官方文檔:?NGINX REVERSE PROXY 當在一臺主機上部署了多個不同的web服務器,并且需要能在80端口同時訪問這些web服務器時,可以使用?nginx?的反向代理功能: 用?nginx?在80端口監聽所…

    Linux筆記 2018-07-08
  • Blog Day 0:Linux運維學習方法論漫談

    By:Alvin Lin
    No:M30-43
    Date:2018-03-26

    Linux筆記 2018-03-26
欧美性久久久久