nginx初步

一、知識整理

1、查看進程使用的cpu;ni查看nice

[root@localhost html]# ps axo pid,comm,psr,ni
 43769 nginx             0  21  -2
 43770 nginx             3  21  -2
 43771 nginx             2  21  -2
 43775 ps                3  19   0

2、C10K問題:并發達到10k

httpdprefork模型默認是256個,其采用select上限是1024個;

3、OpenResty

OpenResty是一個基于 Nginx Lua 的高性能 Web 平臺,其內部集成了大量精良的 Lua 庫、第三方模塊以及大多數的依賴項。用于方便地搭建能夠處理超高并發、擴展性極高的動態 Web 應用、Web 服務和動態網關。

4 根據等待模式不同,IO動作可分為五種模式:

blocking I/O:阻塞式I/O:兩步都阻塞

nonblocking I/O:非阻塞式I/O:忙等,阻塞在第二步

I/O multiplexing (select and poll)I/O復用:阻塞在復用IO

signal driven I/O (SIGIO):信號驅動式I/O:回調,阻塞第二階段,解放第一階段,可以接多個請求

asynchronous I/O (AIO_):異步I/O:解放兩個階段

5、nginx的源碼包編譯安裝,首先安裝需要的環境和包:

[root@localhost nginx-1.10.0]# yum install openssl-devel  zlib-devel  pcre-devel  proxy-devel -y
[root@localhost nginx-1.10.0]# useradd -r nginx
[root@localhost nginx-1.10.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio

6、nginx主進程主要完成如下工作:

    讀取并驗證配置信息;

    創建、綁定及關閉套接字;

    啟動、終止及維護worker進程的個數;

    無須終止服務而重新配置工作特性;

    控制非中斷式程序升級,啟用新的二進制程序并在需要時回滾至老版本;

    重新打開日志文件;

    編譯嵌入式perl腳本;

    worker進程主要完成的任務包括:

    接收、傳入并處理來自客戶端的連接;

    提供反向代理及過濾功能;

    nginx任何能完成的其它任務;

    cache loader進程主要完成的任務包括:

    檢查緩存存儲匯總的緩存對象;

    使用緩存元數據建立內存數據庫;

    cache manager進程的主要任務:

    緩存的失效及過期檢驗;

 

二、命令詳解

1、正常運行必備的配置:

Syntaxuser user [group]

Defaultuser nobody nobody;

Contextmain

定義運行work進程時的用戶和組,默認是nobody

pid /PATH/TO/PID_FILE

指定存儲nginx主進程進程號碼的文件路徑。

include file | mask;

指明包含進來的其他配置文件片段;

load_module_file

裝載一個動態模塊(1.9.11版本之后才有)

2、性能優化相關的配置:

worker_process number | auto;

worker進程的數量;通常應該為當前主機的cpu物理核心數或減一,auto為與核心數相同

worker_cpu_affinity cpumask …;

worker_cpu_affinity auto [cpumask];(cpu掩碼) auto是指隨機使用核心,但不高效;

如:00000001 00000010 是指第0號和第1

worker_priority number

指定worker進程的nice-20~19,此處是-20~20)值,模式都是0,。設定worker進程優先級,優先被調度到cpu。

worker_rlimit_nofile  (number of file)

worker進程能夠打開的文件(每個連接至少一個套接字文件)數量上限。

3、事件驅動相關的配置;

worker_connections number;

每個worker進程所能夠打開的最大并發連接數量;

use METHOD;

指明并發連接請求的處理方法;默認是epoll。

accept_mutex on|off

處理新的連接請求的方法;on時由個worker輪流處理新請求,off以為這每個新請求的到達都會通知所有的worker進程;

mutex互斥鎖,默認是off,建議設置為on

4、定義虛擬主機的配置:

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]

 backlog=后援隊列長度 rcvbuf:接受緩沖大小; sndbuf:發送緩沖大小

server_name name…;

指明虛擬主機的主機名稱;后可跟多個由空白字符分隔的字符串;

支持*通配任意長度的任意字符;server_name *.magedu.com

支持~起始的字符做正則表達模塊匹配;server_name ~^www\d+\.amgedu\.com$

其中\d 表示0-9

匹配順序機制:

首先是字符串精確匹配;

左側*通配符通配;

右側*通配符;

正則表達式匹配順序最靠后。

tcp_nodelay on|off

對于GUI程序,如網絡游戲程序(服務器需要實時跟蹤客戶端鼠標的移動),關閉TCP_NODELAY通常是正確的。

sendfile on|off:

sendfile系統調用是一種文件傳輸的系統調用kernel系統調用關系不大。nginx支持了sendfile之后,避免了內核層與用戶層的上下文切換工作,大大減少了系統性能的開銷;sendfile是個比 read write 更高性能的系統接口, 不過需要注意的是,sendfile 是將 in_fd 的內容發送到 out_fd 。而 in_fd 不能是 socket , 也就是只能文件句柄。 所以當 Nginx 是一個靜態文件服務器的時候,開啟 SENDFILE 配置項能大大提高 Nginx 的性能。 但是當 Nginx 是作為一個反向代理來使用的時候,SENDFILE 則沒什么用了,因為 Nginx 是反向代理的時候。 in_fd 就不是文件句柄而是 socket,此時就不符合 sendfile 函數的參數要求了。

root和alias:

location /PATH/ 在之中定義root后,其路徑是root定義的path/下的/PATH;定義了alias之后,其路徑與別名是相對應的;(一個對應左側,一個對應右側) 在一個server中,location可以存在多個,用戶實現從uri到文件系統的路徑映射;nginx會根據用戶請求的RUI來檢查定義的所有location并找出一個最佳匹配,而后應用其配置。

5、客戶端相關定義:

keepalive_timeout timeout [header_timeout];

設置保持連接的超時時長,0為禁止,默認75s

keepalive_requests number;

默認為100;在一次長連接所允許的數量;

keepalive_disable none | browser….;

設定對哪種瀏覽器關閉長連接;

send_timeout time

向客戶端發送響應報文的超時時長,此處是指兩次寫操作之間的間隔時長;

client_body_buffer_size

默認是 16K,超出部分將被暫存到磁盤上的由下一條指定的path的指定的位置;

client_body_temp_path path [level1 [level2 [level3]]];

設定用戶存儲客戶端請求報文的body部分臨時存儲路徑及子目錄結構和數量;

level是16進制的數字:

1 2 表示16個一級子目錄下有256兩個子目錄,如下:

client_body_buffer_size 20K;

client_body_temp_path /tmp/nginx 1 2 2;

limit_rate rate

限制響應給客戶端的傳輸速率;單位是bytes/second,0表示無限制;

limit_except method…

限制指定主機使用此類請求方法;allow,deny;

6、文件操作優化的配置:

alo on|off

默認是off,建議開啟;

directio size|off;

在服務器上啟用,直接io機制,此處指文件大小大于指定大小時使用,將數據直接存入磁盤;默認是4M

open_file_cache max=N [inactive=time];(非活動緩存時間,此處指定的時長內未被命中的或命中次數少于min_users指令所指定的次數的緩存項即為非活動項;過時清除)

N為緩存上線,達到上限后會使用LRU算法實現緩存管理;

打開文件緩存功能;存儲文件描述符、大小、最近一次修改時間的元數據,緩存目錄的結構,沒有權限訪問的文件的信息也會緩存下來。

open_file_cache_valid time

驗證緩存有效期的檢查時間;默認60s

open_file_cache_min_users number;

inactive參數指定的時長內,至少應被命中多少次方可被歸類為活動項;

open_file_cache_errors on|off

是否緩存查找時發生錯誤的文件的相關信息;

7、基于basic機制的用戶的控制:

auth_basic STRING|off;

auth_basic_user_file file

8、location相關配置:

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

location URI {};

對當前路徑及子路徑下的所有對象都生效;

location = URI;完全精確匹配,如若寫為location /

則只會匹配www.magedu.com/

只對當前路徑生效,不包括子路徑;

location ~ URI {}

location ~* URI {}

模式匹配,此處的URI可使用正則表達式,~區分字符大小寫;~*不區分大小寫;

location ^~ URI {}

對左半部分做匹配檢查,不區分大小寫;

優先級:=最高,^~其次,~|~*相同,任何符號都沒有的最末;不帶符號代表以此起始的所有URL(文件,非路徑);同樣沒有符號,以路徑最長的優先;

9、ngx_http_rewrite_module模塊:

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

rewrite REGEX REPLACEMENT [FLAG]

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

注意:在同一級別配置塊中存在多個rewrite規則,那么會自上而下逐個檢查;并逐個替換,有可能形成死循環;[flag]所表示的標志位用于控制此循環機制;如果replacement是以http://或者https://開頭,則替換結果會直接以重定向返回給客戶端;

[flag]

last:默認;重寫完成后停止對當前URI在當前location中后續的其它重寫操作,而后對新的URI啟動新一輪重寫檢查;

break:本次重寫完成后,跳出循環,可用于防止死循環。以上兩次都是nginx內部自動跳轉;客戶端只需要請求一次;

redirect:返回臨時重定向的30x標識碼,而使瀏覽器重新發送請求;不能寫絕對路徑即以httphttps開頭。此flag使用戶的客戶端瀏覽器重新發出請求,而不是在nginx內部自動跳轉;

permanent:永久重定向;

三、課后練習

練習:實現lnmp,提供多個虛擬主機;

(1) http, 提供wordpress;

(2) https, 提供pma

步驟一:首先配置LNMP環境:

安裝所需要的開發環境和mysql-server,php,php-fpmphp-mysql。

安裝編譯nginx所需要的環境并編譯安裝nginx

[root@localhost nginx-1.10.0]# yum install openssl-devel  zlib-devel  pcre-devel  proxy-devel -y
[root@localhost nginx-1.10.0]# useradd -r nginx
[root@localhost nginx-1.10.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio

配置nginx的環境變量等;

步驟二:更改php-fpm的配置文件:

[root@localhost ~]# vim /etc/php-fpm.d/www.conf

打開ping、sessionpm_status功能,并將啟動的屬組屬主更改為nginx

ping.path = /ping

php_value[session.save_path] = /var/lib/php/session

pm.status_path = /pm_status

user = nginx

group = nginx

配置mysql,更改root用戶密碼;此處因為安裝在同一主機上,監聽的IP都使用的127.0.0.1

開啟mysql服務和php-fpm服務。

步驟三:配置虛擬主機1

server {

    listen 10.1.49.11:80;

    server_name www1.magedu.com;

    root /vhost/www1/;

    index index.php index.html;

    location ~* \.php$ {

        root /vhost/www1;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /vhost/www1/$fastcgi_script_name;

        fastcgi_pass 127.0.0.1:9000;

        include fastcgi_params;

    }

    location ~* ^/(pm_status|ping)$ {

        include     fastcgi_params;

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_param SCRIPT_FILENAME /vhost/www1/$fastcgi_script_name

    }

}

使用測試頁測試:

[root@localhost ~]# cat /vhost/www1/index.php.bak 
<h1>Test Html</h1>
<?php
$conn=mysql_connect('localhost','root','magedu');
if ($conn)
echo "success";
else
echo "failure";
?>
<?php
phpinfo();
?>

blob.png

步驟四:安裝WordPress

使用mysql授權用戶:

MariaDB [(none)]> CREATE DATABASE wordpress ;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> USE wordpress
Database changed
MariaDB [wordpress]> GRANT ALL ON wordpress.* TO 'word'@'127.0.0.1' IDENTIFIED BY 'magedu';
Query OK, 0 rows affected (0.01 sec)
MariaDB [wordpress]> GRANT ALL ON wordpress.* TO 'word'@'localhost' IDENTIFIED BY 'magedu';
Query OK, 0 rows affected (0.00 sec)
MariaDB [wordpress]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

WordPress其父目錄更改為可寫:

[root@localhost vhost]# chown root:nginx www1 
[root@localhost vhost]# chmod g+w www1
[root@localhost vhost]# ll
總用量 4
drwxrwxr-x. 5 root nginx 4096 10月 15 06:50 www1
drwxr-xr-x. 2 root root    22 10月 15 06:10 www2

啟動安裝步驟:

blob.png

blob.png

blob.png

步驟五:配置虛擬主機2

server {

    root /vhost/www2/;

    server_name www2.magedu.com;

    listen 443 ssl;

    index index.html index.htm index.php;

    ssl on;

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

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

    ssl_session_cache shared:sslcache:20m;

    location ~* \.php$ {

        root /vhost/www2/;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME /vhost/www2/$fastcgi_script_name;

        fastcgi_pass 127.0.0.1:9000;

        include fastcgi_params;

    }

}

步驟六:生成證書:

[root@localhost ssl]# (umask 077;openssl genrsa -out nginx.key 2048)
[root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr -days 365
[root@localhost ssl]# openssl ca -in nginx.csr  -out nginx.crt -days 365

訪問驗證:

blob.png

步驟七:安裝pma

[root@localhost phpMyAdmin-4.0.5-all-languages]# cp ./* -rf  /vhost/www2/
[root@localhost www2]# chown root:nginx ./* -R
[root@localhost www2]# cp config.sample.inc.php config.inc.php 
[root@localhost www2]# vim config.inc.php

添加隨機數,安裝:

報錯:安裝mbstringphp-gd包:

blob.png

[root@localhost Packages]# yum install php-mbstring  php-gd

重載服務,刷新訪問:

[root@localhost Packages]# systemctl reload php-fpm

blob.png

blob.png

添加mcrypt擴展,重載訪問:

[root@localhost Packages]# yum install php-mcrypt

blob.png

原創文章,作者:SilencePavilion,如若轉載,請注明出處:http://www.www58058.com/56381

(0)
SilencePavilionSilencePavilion
上一篇 2016-10-31 09:50
下一篇 2016-10-31 10:56

相關推薦

  • Git 分布式 Moosefs + Corosync + DRBD 集群

        對于 Git 集群來說,在不采用存儲陣列的情況下,分布式存儲系統是一個很好的解決方案。目前可使用的分布式文件系統,初步了解了一下,Git 是屬于小文件的應用,因此可考量的我想就只有目前的 Moosefs、Ceph 了,Ceph 目前好似國內應用不多,貌似不太穩定。至于 GlusterFS 其比較適用于大文件的應…

    Linux干貨 2016-02-22
  • 磁盤管理(二)之swap、dd工具使用

    磁盤管理(二)之swap、dd工具使用   一、掛載點和/etc/fstab   (1)配置文件/etc/fstab,當系統啟動時,自動加載該文件,會把寫在配置文件里面的所有掛載點全部自動掛載上去,只要按照格式寫,就不會丟失。   (2)文件掛載配置文件,如下圖:    &nbs…

    Linux干貨 2016-08-29
  • 文件查找工具locate和find的使用分析

    文件查找工具locate和find的使用分析 不管是在windows系統中還是在Linux系統中,我們經常會一些文件進行搜索查找,而在Linux系統中經常用到的搜索工具有locate和find,這兩種搜索工具的工具原理和用法都不相同,一下將這對這兩種搜索工具的使用進行分析。 1、locate工具的工作原理是對/var/lib/mlocate/mlocat.d…

    Linux干貨 2016-08-18
  • Stream EDitor ( Blog 6)

    文本流編輯器,行編輯器sed詳解

    Linux干貨 2017-11-27
  • Heartbeat高可用http

    Heartbeat高可用http 實驗圖 heartbeat高可用http 一、實驗圖: 二、heartbeat高可用http(Heartbeat V1 haresource) heartbeat節點ssh互信 heartbeat節點名稱相互解析,uname -n heartbeat節點時間一致性 安裝前準備: ssh多節點互信 [root@node4&nb…

    Linux干貨 2016-07-07
  • class-6 積累應用

    1、三種權限rwx對文件和目錄的不同意義     ## 讀寫執行對于文件的意義         r:針對于文本文件         w:可修改內容,但不能刪除文件本身,需要x權限配合  &n…

    Linux干貨 2016-08-05
欧美性久久久久