国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Nginx

luck / 3220人閱讀

摘要:主進(jìn)程不直接響應(yīng)瀏覽器,是管理子進(jìn)程使用。瀏覽器訪問(wèn)會(huì)到子進(jìn)程中響應(yīng)。日志需要備份,文件在被進(jìn)程所打開(kāi),不能使用命令。是設(shè)置變量使用,可以達(dá)到多條件判斷時(shí)做標(biāo)記使用。

nginx 簡(jiǎn)介

高性能WEB服務(wù)器

Nginx ("engine x") 是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè) IMAP/POP3/SMTP 代理服務(wù)器.
Nginx 是由Igor Sysoev為落實(shí)訪問(wèn)量第二的Rambler.ru 站點(diǎn)開(kāi)發(fā)的.

編譯安裝

</>復(fù)制代碼

  1. root@# yum install pcre #先安裝pcre,正則表達(dá)式的庫(kù)
  2. root@# ./configure --prefix=/usr/local/nginx
  3. root@# make && make install
  4. root@# cp /usr/local/nginx/conf/nginx.conf.default /usr/local/conf/nginx.conf

查看nginx文件底下目錄:

</>復(fù)制代碼

  1. conf // 配置文件目錄
  2. html // 放置網(wǎng)頁(yè)文件
  3. logs // 日志目錄
  4. sbin // 主要二進(jìn)制程序文件

</>復(fù)制代碼

  1. 啟動(dòng)nginx

</>復(fù)制代碼

  1. > ./sbin/nginx

報(bào)錯(cuò):

</>復(fù)制代碼

  1. [root@localhost nginx]# ./sbin/nginx
  2. nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
  3. nginx: [emerg] still could not bind()

不能綁定80端口,80端口已經(jīng)被占用.
解決,把占用80端口的軟件或服務(wù)關(guān)閉即可.

</>復(fù)制代碼

  1. > kill -9 標(biāo)識(shí)
  2. > pkill -9 服務(wù)
  3. > pkill -9 http
編譯PHP

</>復(fù)制代碼

  1. ./configure --prefix=/usr/local/php --enable-fpm
  2. cp /source-path/php.ini-development /usr/local/php/lib/php.ini
信號(hào)量

nginx有兩個(gè)進(jìn)程,主進(jìn)程msater進(jìn)程。主進(jìn)程不直接響應(yīng)瀏覽器,是管理子進(jìn)程使用。
瀏覽器訪問(wèn)會(huì)到子進(jìn)程中響應(yīng)。

</>復(fù)制代碼

  1. > kill -INT pid(進(jìn)程號(hào))

</>復(fù)制代碼

  1. > ps aux | grep nginx // 查看進(jìn)程號(hào)
參數(shù) 意義
TERM,INT Quick shutdown (趕緊銷毀進(jìn)程)
QUIT Graceful shutdown (優(yōu)雅的關(guān)閉進(jìn)程,即等待請(qǐng)求結(jié)束后再關(guān)閉)
HUP Configuration reload ,Start the new worker processes with a new configuration Gracefully shutdown the old worker processes 改變配置文件,平滑的重讀配置文件
USR1 Reopen the log files 重讀日志,在日志按月/日分割時(shí)有用
USR2 Upgrade Executable on the fly 平滑的升級(jí) (升級(jí)nginx)
WINCH Gracefully shutdown the worker processes 優(yōu)雅關(guān)閉舊的進(jìn)程(配合USR2來(lái)進(jìn)行升級(jí))

</>復(fù)制代碼

  1. > kill -信號(hào)選項(xiàng) nginx的主進(jìn)程號(hào)
  2. > kill -HUP 1480 (修改配置文件并不需要重啟服務(wù)器,才能生效)

在linux中,一個(gè)文件對(duì)應(yīng)一個(gè)節(jié)點(diǎn)inode,inode是文件真正在磁盤(pán)上的位置。文件名字是表現(xiàn)。
日志需要備份,文件在被nginx進(jìn)程所打開(kāi),不能使用mv命令。
除了使用mv命令,還需要建立新的文件,同時(shí)需要告知nginx服務(wù)器,來(lái)讀取最新的日志文件。

</>復(fù)制代碼

  1. > kill -信號(hào)控制 `cat /xxx/path/log/nginx.pid`
  2. > kill -USR1 1480
  3. > kill -USR1 `cat /xxx/path/log/nginx.pid`
  4. > kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

</>復(fù)制代碼

  1. > ./sbin/nginx -h
  2. > ./sbin/nginx -s reload // 關(guān)閉
  3. > ./sbin/nginx // 開(kāi)啟
  4. > ./sbin/nginx -s reopen // 重讀日志,相當(dāng)于 // kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
  5. > ./sbin/nginx -t // 檢查日志文件是否準(zhǔn)確
虛擬主機(jī)配置

</>復(fù)制代碼

  1. nginx配置段

全局區(qū)
worker_processes 1; // 有一個(gè)工作區(qū)域的子進(jìn)程,可以自行修改,但太大無(wú)意義,因?yàn)橐獱?zhēng)奪CPU,一般設(shè)置為CPU數(shù)*核數(shù)

</>復(fù)制代碼

  1. #user nobody;
  2. worker_processes 1; # 工作進(jìn)程,子進(jìn)程

Evnet區(qū)

一般配置nginx連接的特性
例如,1個(gè)worker能同時(shí)允許多少鏈接

</>復(fù)制代碼

  1. Http段

</>復(fù)制代碼

  1. http { // 這是配置http服務(wù)器的主要段
  2. Server1 { // 這是虛擬主機(jī)段
  3. Location { // 定位,把特殊的路徑或文件再次定位,如image目錄多帶帶處理// 如 .php 多帶帶處理
  4. }
  5. }
  6. Server2 {
  7. }
  8. }

nginx配置文件:

</>復(fù)制代碼

  1. #user nobody;
  2. worker_processes 1; # 工作進(jìn)程,子進(jìn)程
  3. #error_log logs/error.log;
  4. #error_log logs/error.log notice;
  5. #error_log logs/error.log info;
  6. #pid logs/nginx.pid;
  7. # 配置nginx連接的特性
  8. events {
  9. # 1個(gè)worker能同時(shí)允許多少鏈接
  10. worker_connections 1024; # 這是指 一個(gè)子進(jìn)程最大允許1024個(gè)鏈接
  11. }
  12. # http 段是配置http服務(wù)器的主要段
  13. http {
  14. include mime.types;
  15. default_type application/octet-stream;
  16. sendfile on;
  17. #tcp_nopush on;
  18. #keepalive_timeout 0;
  19. keepalive_timeout 65;
  20. server { # 這是虛擬主機(jī)
  21. listen 80;
  22. server_name localhost;
  23. #access_log logs/host.access.log main;
  24. location / { #
  25. root html;
  26. index index.html index.htm;
  27. #error_page 404 /404.html;
  28. #
  29. error_page 500 502 503 504 /50x.html;
  30. location = /50x.html {
  31. root html;
  32. }
  33. #
  34. #}
  35. #
  36. #location ~ .php$ {
  37. # root html;
  38. # fastcgi_pass 127.0.0.1:9000;
  39. # fastcgi_index index.php;
  40. # include fastcgi_params;
  41. #}
  42. # concurs with nginx"s one
  43. #
  44. #location ~ /.ht {
  45. # deny all;
  46. #}
  47. }
  48. #
  49. #server {
  50. # listen 8000;
  51. # listen somename:8080;
  52. # server_name somename alias another.alias;
  53. # location / {
  54. # root html;
  55. # index index.html index.htm;
  56. # }
  57. #}
  58. # HTTPS server
  59. #
  60. #server {
  61. # listen 443;
  62. # server_name localhost;
  63. # ssl on;
  64. # ssl_certificate cert.pem;
  65. # ssl_certificate_key cert.key;
  66. # ssl_session_timeout 5m;
  67. # ssl_protocols SSLv2 SSLv3 TLSv1;
  68. # ssl_ciphers HIGH:!aNULL:!MD5;
  69. # ssl_prefer_server_ciphers on;
  70. # location / {
  71. # root html;
  72. # index index.html index.htm;
  73. # }
  74. #}
  75. }

簡(jiǎn)單的虛擬主機(jī)配置:

</>復(fù)制代碼

  1. server {
  2. listen 80;
  3. server_name z.com;
  4. location / {
  5. root z.com; # root 路徑可以是相對(duì)路徑 相對(duì)nginx安裝的根目錄
  6. # 可以是絕對(duì)路徑 /usr/loca/nginx;
  7. index index.html index.htm;
  8. }
  9. }
  10. server {
  11. listen 2022;
  12. server_name z.com;
  13. location / {
  14. root /home/mm/twinkle/;
  15. index index.html index.htm;
  16. }
  17. }

</>復(fù)制代碼

  1. > ifconfig // 查看信息
日志管理

nginx的server段,可以看到的信息有:
#access_log logs/host.access.log main;該虛擬主機(jī),它的訪問(wèn)日志的文件是logs/host.access.log 使用的格式是main格式.
除了main格式,還可以自定義其它格式.

main格式是什么?

</>復(fù)制代碼

  1. #log_format main "$remote_addr - $remote_user [$time_local] "$request" "
  2. # "$status $body_bytes_sent "$http_referer" "
  3. # ""$http_user_agent" "$http_x_forwarded_for"";

main格式是定義好的一種日志的格式,并起個(gè)名字,便于引用.
例如:
main類型的日志,記錄了remove_addr...http_x_forwarded_for等選項(xiàng).

</>復(fù)制代碼

  1. remote_addr // 遠(yuǎn)程地址
  2. remote_user[$time_local] // 訪問(wèn)遠(yuǎn)程的時(shí)間, 如果訪問(wèn)http頭信息沒(méi)有攜帶,是空的。
  3. $request // 請(qǐng)求方法`get` & `post`
  4. $status // 請(qǐng)求狀態(tài)碼 例如:400
  5. $body_bytes_sent // 主體發(fā)送的字節(jié)
  6. $http_referer // referer頭
  7. $http_user_agent // 用戶代理/蜘蛛
  8. $http_x_forwarded_for // 被轉(zhuǎn)發(fā)的請(qǐng)求原始IP (在經(jīng)過(guò)代理時(shí),代理把本來(lái)IP加在此頭信息中,傳輸原始IP. )

蜘蛛:搜索引擎的服務(wù)器.
百度robots
蜘蛛?yún)f(xié)議.

Nginx允許針對(duì)不同的server做不同的Log(有的web服務(wù)器不支持,如:lighttp)

</>復(fù)制代碼

  1. access_log logs/z.com.access.log main; // 配置多帶帶的log日志
定時(shí)任務(wù)

</>復(fù)制代碼

  1. shell 腳本

shell 腳本注意空格

變量聲明

</>復(fù)制代碼

  1. a // 定義
  2. $a // 使用

輸出執(zhí)行返回結(jié)果

</>復(fù)制代碼

  1. echo `date -d yesterday %Y%m%d` // 第一種: ``
  2. echo $(date -d yesterday %Y%m%d) // 第二種: $()

日志切割

</>復(fù)制代碼

  1. #!/bin/bash
  2. LOGPATH=/usr/local/nginx/logx/z.com.access.log
  3. BASEPATH=/data
  4. bak=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).zcom.access.log
  5. #echo $bak
  6. mv $LOGPATH $bak
  7. touch $LOGPATH
  8. kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
Location

location 有定位的意思,根據(jù)Uri來(lái)進(jìn)行不同定位

在虛擬主機(jī)的配置中,是必不可少的location可以把網(wǎng)站的不同部分,定位到不同的處理方式上。
比如。碰到.php,如何調(diào)用PHP解釋器,這時(shí)需要location。

location 的語(yǔ)法

</>復(fù)制代碼

  1. location [=|~|~*|^~] patt {
  2. }

中括號(hào)可以不寫(xiě)任何參數(shù),此時(shí)稱之為一般匹配
也可以寫(xiě)參數(shù)
因此,大類型可以分為3種:

location = patt {} [精準(zhǔn)匹配]

location patt {} [一般匹配]

location ~ patt {} [正則匹配]

=開(kāi)頭表示精確匹配
^~開(kāi)頭表示uri以某個(gè)常規(guī)字符串開(kāi)頭,不是正則匹配
~開(kāi)頭表示區(qū)分大小寫(xiě)的正則匹配
~*開(kāi)頭表示不區(qū)分大小寫(xiě)的正則匹配
/通用匹配,如果沒(méi)有其它匹配,任何請(qǐng)求都會(huì)匹配到

精準(zhǔn)匹配

如何發(fā)揮作用?

首先看是否有精準(zhǔn)匹配,如果有,則停止匹配過(guò)程.

</>復(fù)制代碼

  1. location = patt {
  2. config A
  3. }

如果 $uri == patt, 匹配成功,使用 config A

判斷使用的那個(gè)location

</>復(fù)制代碼

  1. location = / {
  2. root /var/www/html/;
  3. index index.htm index.html;
  4. }
  5. location / {
  6. root /usr/local/nginx/html;
  7. index index.html index.htm;
  8. }

如果訪問(wèn)的是:http://www.xxx.com
定位流程:

精準(zhǔn)匹配中 /,得到index 頁(yè)為index.htm

再次訪問(wèn) /index.htm, 此次內(nèi)部跳轉(zhuǎn)uri是/index.htm,跟目錄為/usr/local/nginx/html

最終結(jié)果,訪問(wèn)了 /usr/local/nginx/html/index.htm

精準(zhǔn)匹配測(cè)試

</>復(fù)制代碼

  1. location = /index.htm { // 添加匹配文件,而非目錄.
  2. }
  3. location /index.htm {
  4. }

一般匹配精準(zhǔn)匹配沖突時(shí),精準(zhǔn)發(fā)揮作用.

正則匹配

</>復(fù)制代碼

  1. location / {
  2. root /usr/local/nginx/html;
  3. index index.html index.htm;
  4. }
  5. location ~ image {
  6. root /var/www/image;
  7. index index.html index.htm;
  8. }

如果訪問(wèn): http://xxx.com/image/a.jpg
這時(shí),//image/a.jpg 匹配,同時(shí)image正則與image/a.jpg也能匹配,誰(shuí)發(fā)揮作用?

一般匹配正則匹配沖突,正則發(fā)揮作用。

圖片真正訪問(wèn)的地址:/var/www/image/a.jpg

</>復(fù)制代碼

  1. locatiorn / {
  2. root /usr/loca/nginx/html;
  3. index index.html index.htm;
  4. }
  5. location /foo {
  6. root /var/www/html;
  7. index inde.html
  8. }

當(dāng)訪問(wèn)http://xxx.com/foo

對(duì)于uri為/foo,兩個(gè)location的patt,都能夠匹配。
/能夠左前綴匹配,/foo也能左前綴匹配.
此時(shí)真正訪問(wèn)的是/var/www/html/foo.
原因:/foo匹配更長(zhǎng),因此使用.

location整體流程

正則匹配有順序關(guān)系,從上到下.有匹配上的就退出.
普通匹配不需要考慮順序,挨個(gè)匹配,最長(zhǎng)的就是匹配上.

location 的匹配過(guò)程:

先判斷精準(zhǔn)匹配,如果匹配成功,立即返回結(jié)果并結(jié)束解析過(guò)程.

判斷一般命中,如果有多個(gè)命中,記錄下來(lái)最長(zhǎng)的匹配結(jié)果. (注意:記錄但不結(jié)束,最長(zhǎng)為準(zhǔn)).

繼續(xù)正則表達(dá)式的解析結(jié)果,按配置里的正則表達(dá)式順序?yàn)闇?zhǔn),由上到下開(kāi)始匹配,一旦匹配成功,理解返回結(jié)果,并結(jié)束解析過(guò)程.

延伸分析:

普通匹配順序無(wú)所謂,是按照匹配長(zhǎng)短來(lái)確定的.

正則匹配是按照順序來(lái)匹配.

rewrite

rewrite(重寫(xiě))語(yǔ)法詳解

重寫(xiě)的規(guī)則可以放在location或者service中.

常用的命令

if 空格 (條件) {} # 設(shè)定條件,再進(jìn)行重寫(xiě)

set # 設(shè)置變量

return # 返回狀態(tài)碼

break # 跳出rewrite

rewrite # 重寫(xiě)

if 語(yǔ)法

</>復(fù)制代碼

  1. if 空格 (條件) { // 空格不允許少
  2. 重寫(xiě)默認(rèn)
  3. }

條件寫(xiě)法:

=來(lái)判斷相等,用于字符串比較

~用正則來(lái)匹配(區(qū)分大小寫(xiě)) , ~*用來(lái)正則匹配(不區(qū)分大小寫(xiě))

-f-d-e 來(lái)判斷是否為文件,為目錄,是否存在.

相等

</>復(fù)制代碼

  1. location / {
  2. if ($remote_addr = 192.168.1.12) {
  3. return 403;
  4. }
  5. root html;
  6. index index.html index.htm;
  7. }

正則

</>復(fù)制代碼

  1. location / {
  2. if ($http_user_agent ~* chrome) {
  3. rewrite ^.*$ /chrome.html;
  4. # 不加 break; 會(huì)導(dǎo)致循環(huán)重定向, 頁(yè)面現(xiàn)象, 500 內(nèi)部服務(wù)器錯(cuò)誤
  5. break;
  6. }
  7. root html;
  8. index index.html index.htm;
  9. }

-f-d-e
除了 nginx.conf配置文件中可以看到變量
在文件conf/fastcig.conf查看全部nginx可以引用的變量.

$fastcgi_script_name 當(dāng)前訪問(wèn)的uri.
例如:/abc.html

</>復(fù)制代碼

  1. location {
  2. if (!-e $document_root$fastcgi_script_name) {
  3. rewrite ^.*$ /404.html;
  4. break;
  5. }
  6. root html;
  7. index index.html index.htm;
  8. }

http://xxx.com/abcds.html,不存在的頁(yè)面為例.
注意:此處需要加break,因?yàn)橛^察訪問(wèn)日志,日志中顯示的訪問(wèn)路徑,依然是地址欄輸入的uri.(GET /abcds.html HTTP/1.1)。
提示:服務(wù)器內(nèi)部的rewrite和302跳轉(zhuǎn)不一樣。跳轉(zhuǎn)的話是URL變化,重新發(fā)送請(qǐng)求404.html,而內(nèi)部rewrite,僅僅是重新讀取404.html的內(nèi)容,上下文沒(méi)有變化,就是 fastcgi_script_name 仍然是 /abcds.html,因此會(huì)循環(huán)重定向。

set
set是設(shè)置變量使用,可以達(dá)到多條件判斷時(shí)做標(biāo)記使用。
達(dá)到apache下的rewrite_condition的效果。

判斷chrome瀏覽器,并且不用break。

</>復(fù)制代碼

  1. if ($http_user_agent ~* chrome) {
  2. set $ischrome 1;
  3. }
  4. if ($fastcgi_script_name = chrome.html) {
  5. set $ischrome 0;
  6. }
  7. if ($ischrome 1) {
  8. rewrite ^.*$ chrome.html;
  9. }

全局變量
可以作用if判斷的全局變量

$args: 等于請(qǐng)求行中的參數(shù),同$query_string
$content_length: 請(qǐng)求頭中的Content-length字段
$content_type: 請(qǐng)求頭中的Content-Type字段
$document_root: 當(dāng)前請(qǐng)求在root指令中指定的值
$host: 請(qǐng)求主機(jī)頭字段,否則為服務(wù)器名稱
$http_user_agent: 客戶端agent信息
$http_cookie: 客戶端cookie信息
$limit_rate: 可以限制連接速率
$request_method: 客戶端請(qǐng)求的動(dòng)作,通常為GET或POST
$remote_addr: 客戶端的IP地址
$remote_port: 客戶端的端口
$remote_user: 已經(jīng)經(jīng)過(guò)Auth Basic Module驗(yàn)證的用戶名
$request_filename: 當(dāng)前請(qǐng)求的文件路徑,由root或alias指令與URI請(qǐng)求生成
$scheme: HTTP方法(如http,https)
$server_protocol: 請(qǐng)求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1
$server_addr: 服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值
$server_name : 服務(wù)器名稱
$server_port: 請(qǐng)求到達(dá)服務(wù)器的端口號(hào)
$request_uri: 包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名,如:”/foo/bar.php?arg=baz”
$uri: 不帶請(qǐng)求參數(shù)的當(dāng)前URI,$uri不包含主機(jī)名,如”/foo/bar.html”
$document_uri: 與$uri相同

編譯PHP

安裝mysql:yum install mysql mysql-devel

nginx+php的編譯.
apache一般是把php當(dāng)作自己的一個(gè)模塊來(lái)啟動(dòng)的,而nginx則是把http請(qǐng)求的變量(如get,user_agent等)轉(zhuǎn)發(fā)給php進(jìn)程,即PHP獨(dú)立進(jìn)程,與nginx進(jìn)行通訊.稱之為fastcgi運(yùn)行方式.
因此,為此apache所編譯的PHP,是不能用于nginx的,需要重新編譯。

注意,編譯的PHP有如下功能:

鏈接mysql

gd庫(kù)

ttf字體

fpm(fastcgi)方式運(yùn)行.

前期安裝

</>復(fù)制代碼

  1. > yum install gd
  2. > yum install freetype
  3. > yum install gd-devel

配置與安裝

</>復(fù)制代碼

  1. ./configure --prefix=/usr/local/fastphp
  2. --with-mysql=mysqlnd
  3. --enable-mysqlnd
  4. --with-gd
  5. --enable-gd-native-ttf
  6. --enable-gd-jis-conv
  7. --enable-fpm
  8. make && make install

編譯完畢后:

</>復(fù)制代碼

  1. > cp /usr/local/src/php-5.4.19/php.ini-development ./lib/php.ini
  2. > cd etc/
  3. > cp etc/php.fpm.conf.default etc/php-fpm.conf

運(yùn)行:

</>復(fù)制代碼

  1. > ./sbin/php-fpm

nginx與PHP是相互獨(dú)立的,PHP以9000端口作為進(jìn)程獨(dú)立運(yùn)行。nginx接收到請(qǐng)求,把請(qǐng)求轉(zhuǎn)給PHP進(jìn)程
配置核心:把請(qǐng)求的信息轉(zhuǎn)發(fā)給9000端口的PHP進(jìn)程,讓PHP進(jìn)程處理指定目錄下的PHP文件.

修改nginx配置文件:conf/nginx.conf

</>復(fù)制代碼

  1. location ~ .php$ {
  2. root html;
  3. fastcgi_pass 127.0.0.1:9000; # 發(fā)送到9000端口進(jìn)程
  4. fastcgi_index index.php;
  5. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 尋找PHP目錄地址
  6. include fastcgi_params;
  7. }

解釋

碰到PHP文件

把根目錄定位到html

把請(qǐng)求上下文轉(zhuǎn)交給9000端口的PHP進(jìn)程。

并告知PHP進(jìn)程,當(dāng)前腳本是$document_root$fastcgi_script_name(注:PHP會(huì)去尋找當(dāng)前腳本位置,所以腳本位置要指對(duì))

PHP處理之后,返回給nginx服務(wù)器.

url重寫(xiě)

注意:用url重寫(xiě),正則里如果有{},整個(gè)正則需要使用""包起來(lái)

靜態(tài)文件地址重寫(xiě)到動(dòng)態(tài)目錄地址
例如:goods-10.html 重寫(xiě)到 goods.php?id=10

</>復(fù)制代碼

  1. location /zf {
  2. rewrite "goods-(d{1,7}).html" /zf/goods.php?id=$1;
  3. }

正則表達(dá)式支持后向引用

</>復(fù)制代碼

  1. location /zf {
  2. index index.php;
  3. rewrite goods-([d]+).html$ /zf/goods.php?id=$1;
  4. rewrite article-([d]+).html$ /zf/article.php?id=$1;
  5. rewrite category-(d+)-b(d+).html /zf/category.php?=$1&barnd=$2;
  6. }

通過(guò)兩次路由對(duì)比寫(xiě)出正則

</>復(fù)制代碼

  1. category.php?id=3&barnd=1&price_min=200&price_max=1700&filter_attr=167.229.202.199
  2. category-3-b2-min200-max700-attr167.229.202.199.html
  3. category-(d+)-b(d+)-min(d+)-max(d+)-attr([d.]+).html category.php?id=$1&barnd=$2&price_min=$3&$price_max=$4&filter_attr=$5;

</>復(fù)制代碼

  1. /category.php?id=3&barnd=2&price_min=0&price_max=0&page=2&sort=goods_id&order=DESC
  2. /category-3-b0-min0-max9-attr0-1-goods_id-DESC.html
  3. category-(d+)-b(d+)-min(d+)-max(d+)-attr([d.]+)-(d+)-(w+)-(w+).html caetgory.php?id=$1&barnd=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8.html
gzip壓縮

網(wǎng)頁(yè)內(nèi)容的壓縮編碼與傳輸速度優(yōu)化

響應(yīng)頭中有:

</>復(fù)制代碼

  1. Content-Encoding: gzip

原理:
瀏覽器-->請(qǐng)求-->聲明可以接受gzip壓縮或default壓縮或compress或sdch壓縮(sdch是google倡導(dǎo)的一種壓縮方式,目前支持的服務(wù)器尚不多)
從http協(xié)議角度看,請(qǐng)求頭,聲明acceopt->encoding:gzip default sdch (是壓縮算法)
服務(wù)器-->回應(yīng)-->把內(nèi)容gzip方式壓縮-->發(fā)送瀏覽器 --> 接收gzip壓縮內(nèi)容(瀏覽器接收之后是壓縮后的二進(jìn)制文件)--> 解碼gzip --> 瀏覽

</>復(fù)制代碼

  1. gzip常用參數(shù)

</>復(fù)制代碼

  1. gzip on|off # 是否開(kāi)啟gizp
  2. gzip_buffers 32 4K| 16 8K # 緩沖(壓縮在內(nèi)存中緩沖幾塊?每塊多大?)
  3. gzip_comp_level[1-9] # 推薦 6 壓縮級(jí)別(級(jí)別越高,壓縮越小,越浪費(fèi)CPU計(jì)算資源)
  4. gzip_disable # 正則匹配 #UA 什么樣的Uri不進(jìn)行g(shù)zip
  5. gzip_min_length 200 # 開(kāi)始?jí)嚎s的最小長(zhǎng)度
  6. gzip_http_version 1.0|1.1 # 開(kāi)始?jí)嚎s的http協(xié)議的版本(如選1.1則滿足1.1的才壓縮)
  7. gzip_proxied # 設(shè)置請(qǐng)求著代理服務(wù)器如何緩存內(nèi)容
  8. gzip_types text/plain appliction/xml #對(duì)哪些類型的文件用壓縮 如txt,xml,html,css
  9. gzip_vary on|off #是否傳輸gzip壓縮標(biāo)志

寫(xiě)在server段上

</>復(fù)制代碼

  1. server {
  2. gzip on;
  3. gzip_buffers 32 4K;
  4. gzip_comp_level 6;
  5. gzip_min_length 200;
  6. gzip_types text/css text/xml application/x-javascript;
  7. }

注意:圖片/mp3等的二進(jìn)制文件,不必壓縮,因?yàn)閴嚎s比較小,比如100->80字節(jié),而且壓縮也是壓縮也是耗費(fèi)CPU資源

expires緩存

expires緩存提升網(wǎng)站負(fù)載

nginx緩存設(shè)置,提高網(wǎng)站性能。
對(duì)于網(wǎng)站的圖片,尤其是新聞?wù)荆瑘D片一旦發(fā)布,改動(dòng)的可能性非常小,用戶訪問(wèn)一次之后,圖片緩存到瀏覽器端,且時(shí)間比較長(zhǎng)的緩存。使用到nginx的expires

nginx中設(shè)置過(guò)期時(shí)間,在location段,或if中寫(xiě):

</>復(fù)制代碼

  1. expires 30s;
  2. expires 30m; // 2分鐘過(guò)期
  3. expires 2h; // 2小時(shí)過(guò)期
  4. expires 30d; // 30天過(guò)期

</>復(fù)制代碼

  1. location ~* .(git|jpg|jpeg|png) {
  2. root html;
  3. expires 1d; # 1天
  4. }

注意:服務(wù)器的日期需要準(zhǔn)確,如果服務(wù)器的日期和實(shí)際日期,可能導(dǎo)致緩存失效。

304也是一種緩存手段,原理是:服務(wù)器響應(yīng)文件內(nèi)容,同時(shí)響應(yīng)etag標(biāo)簽(內(nèi)容簽名)和last_modified_since 2個(gè)標(biāo)簽值,瀏覽器下次請(qǐng)求時(shí),瀏覽器要發(fā)送這兩個(gè)頭信息標(biāo)簽,服務(wù)器檢測(cè)文件有沒(méi)有發(fā)生變化,沒(méi)有變化的話,返回頭信息(etag和last_modified_since)瀏覽器知道內(nèi)容無(wú)改變,于是直接調(diào)用本地緩存。

這過(guò)程中,也請(qǐng)求了服務(wù)器,但是傳輸內(nèi)容極少,對(duì)于變化周期較短,如靜態(tài)html,css。

反向代理

nginx反向代理服務(wù)器

使用nginx做反向代理和負(fù)載均衡支持兩個(gè)用法:

proxy

upstream

nginx不自己處理php的相關(guān)請(qǐng)求,而是把php的相關(guān)轉(zhuǎn)發(fā)給apache處理(php不讓nginx跑)

這種形式,就是動(dòng)靜分離,更為嚴(yán)謹(jǐn)?shù)恼f(shuō)法是反向代理

注釋掉nginx解析php的配置,通過(guò)代理形式轉(zhuǎn)到apache解析php,(要保證apache能夠支持php)

</>復(fù)制代碼

  1. location ~ .php$ {
  2. proxy_prss http://102.168.1.10:8000;
  3. }

nginx服務(wù)器通過(guò)中間的代理,交代給誰(shuí)完成任務(wù),或者交代給幾個(gè)人做,都是可行的。
把任務(wù)分配給多臺(tái)機(jī)器,就是負(fù)載均衡。

負(fù)載均衡

反向代理后端如果有多臺(tái)服務(wù)器,自然可形成負(fù)載均衡。
但是proxy_pass 如何指向多態(tài)服務(wù)器?
把多臺(tái)服務(wù)器用up_stream指定綁定在一起并起一個(gè)組名,然后proxy_pass指向該組.
配置服務(wù)器:

</>復(fù)制代碼

  1. server {
  2. listen 81;
  3. server_name localhost;
  4. root /var/www/image;
  5. }
  6. server {
  7. listen 82;
  8. server_name localhost;
  9. root /var/www/image;
  10. }

增加組:

</>復(fù)制代碼

  1. #upstream 組名字 {
  2. # server ip wight=1(權(quán)重) fail_timeout=3(連接不上的時(shí)間) max_fails=2(連接不上的次數(shù))
  3. #}
  4. upstream imageserver {
  5. server 192.168.1.100:81 weight=1 fail_timeout=3 max_fails=2;
  6. server 192.168.1.100:82 fail_timeout=3 max_fails=2;
  7. }

然后修改反向代理配置代碼:

</>復(fù)制代碼

  1. location ~* .(jpg|jpge|git|png) {
  2. proxy_pass http://imageserver;
  3. }

默認(rèn)的負(fù)載均衡的算法,就是正對(duì)后端服務(wù)器的順序,逐個(gè)請(qǐng)求。也有其它的負(fù)載均衡算法,如一致性哈希,需要安裝第三方模塊ngx_http_upstream_consistent_hash

問(wèn)題:
反向代理導(dǎo)致了后端服務(wù)器的IP,為前端服務(wù)器的IP,而不是客戶真正的IP
解決方式:
使用x-forwar
為了不改變用戶的IP,需要通過(guò)變量存儲(chǔ)IP帶過(guò)去,一般約定俗成是通過(guò)頭信息是:

</>復(fù)制代碼

  1. proxy_set_header X-Forwarded-For $remote_addr;

location ~* .(jpg|jpge|git|png) {

</>復(fù)制代碼

  1. proxy_set_header X-Forwarded-For $remote_addr;
  2. proxy_pass http://imageserver;

}

連接memcached

</>復(fù)制代碼

  1. 編譯或安裝memcached

</>復(fù)制代碼

  1. git clone https://github.com/memcached/memcached.git
  2. cd memcached
  3. sudo apt-get install autotools-dev
  4. sudo apt-get install automake
  5. ./autogen.sh // 生成configure文件
  6. ./configure --with-php-config=/etc/php/7.1/fpm // 配置指定php的配置文件
  7. make && make install

安裝好之后提示的信息:

</>復(fù)制代碼

  1. 安裝好后:Installing shared extensions: /usr/local/sxin/php7/lib/php/extensions/no-debug-zts-20151012/

修改php.ini配置文件

</>復(fù)制代碼

  1. entension=/usr/local/sxin/php7/lib/php/extensions/no-debug-zts-20170722/memcached.so

刪除進(jìn)程,重啟php

</>復(fù)制代碼

  1. pkill -9 php

測(cè)試是否成功:

</>復(fù)制代碼

在phpinfo中是否輸出memcache模塊

安裝過(guò)程中出現(xiàn)的錯(cuò)誤:

方法1:
需要安裝libevent,可能會(huì)報(bào)無(wú)法安裝,使用wget方式安裝

</>復(fù)制代碼

  1. sudo apt-get install libevent libevent-deve

方法2:

</>復(fù)制代碼

  1. wget http://monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
  2. tar -zxvf libevent-1.4.14b-stable.tar.gz
  3. cd libevent-1.4.14b-stable
  4. ./configure --prefix=/usr
  5. make && make install

</>復(fù)制代碼

  1. nginx直連memcached

原理:

nginx需要設(shè)定key,去查memcached

如果不存在需要回調(diào)php,并把key值傳給php

nginx請(qǐng)求memcached時(shí),用什么做key?
一般用 uri arg做key, 如abc.php?id=2

</>復(fù)制代碼

  1. location / {
  2. set $memcached_key "$uri";
  3. memcacehd_pass 127.0.0.1:11211;
  4. error_page 404 /callback.php
  5. }

問(wèn)題:
如果多臺(tái)memcaehed,某個(gè)key去請(qǐng)求那個(gè)memcached?
php又幫nginx把內(nèi)容存儲(chǔ)到哪個(gè)memcached?
回調(diào)的php,有把信息寫(xiě)在哪兒?
最終問(wèn)題:多態(tài)memcached,nginx與php,如何保持集群上的算法同步.

要有穩(wěn)定集群算法

nginx與php對(duì)于memcached的算法要同步

解決:
nginx hash($uri) --> 某臺(tái)memcached
php hash($uri) --> 同一臺(tái)memcached
需要一個(gè)hash規(guī)則
這樣才能保證分布式的數(shù)據(jù)同步。
默認(rèn)的nginx分布式是通過(guò)計(jì)數(shù)器來(lái)輪流請(qǐng)求,需要第三方模塊和一致性哈希應(yīng)用

第3方模塊編譯

第3方模塊編譯和一致性哈希應(yīng)用

</>復(fù)制代碼

  1. 編譯第三方模塊

下載模塊,然后重新指定nginx編譯參數(shù)

</>復(fù)制代碼

  1. ./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/ngx_http_consistent/hash/
  2. make && make install

</>復(fù)制代碼

  1. 安裝模塊后

</>復(fù)制代碼

  1. upstream memserver {
  2. consistent_hash $requrest_uri;
  3. #server localhost:11211;
  4. #server localhost:11212;
  5. #server localhost:11213;
  6. server 192.168.1.100:11211;
  7. server 192.168.1.100:11212;
  8. server 192.168.1.100:11213;
  9. }
  10. server {
  11. listent 80;
  12. server_name localhost;
  13. location / {
  14. set $memcached_key "$uri";
  15. memcached_pass memserver;
  16. error_page 404 /callback.php;
  17. }
  18. }

在php.ini中修改默認(rèn)hash取模的策略

</>復(fù)制代碼

  1. memcache.hash_strategy=consistent

php代碼

</>復(fù)制代碼

  1. addServer("localhost", 11211);
  2. // $mem->addServer("localhost", 11212);
  3. // $mem->addServer("localhost", 11213);
  4. $mem->addServer("192.168.1.100", 11211);
  5. $mem->addServer("192.168.1.100", 11212);
  6. $mem->addServer("192.168.1.100", 11213);

注意:
在 upstream做負(fù)載均衡時(shí),要用IP或遠(yuǎn)程主機(jī)名,不能使用localhsot

大訪問(wèn)量?jī)?yōu)化

大訪問(wèn)量?jī)?yōu)化整體思路

高性能的服務(wù)器的架設(shè)

網(wǎng)站的請(qǐng)求量是絕對(duì)的,很難降下來(lái)。

對(duì)于高性能網(wǎng)站,請(qǐng)求量大,如何支撐?

要減少請(qǐng)求
對(duì)于開(kāi)發(fā)人員 -- 合并css,背景圖片,壓縮文件,減少mysql查詢

nginx的expiress,利用瀏覽器緩存等,減少查詢

利用cdn來(lái)響應(yīng)請(qǐng)求

最終剩下來(lái)的,不可避免的請(qǐng)求 -- 服務(wù)器集群 + 負(fù)載均衡來(lái)支撐

</>復(fù)制代碼

  1. 如何響應(yīng)高并發(fā)請(qǐng)求

既然響應(yīng)是不可避免的,要做的是把工作內(nèi)容“平均”分給每臺(tái)服務(wù)器,最理想的狀態(tài):每臺(tái)服務(wù)器的性能都被充分利用。

服務(wù)器講究:
像存儲(chǔ)數(shù)據(jù)的,cpu不一定要強(qiáng),但是硬盤(pán)一定要好,安裝了ssd固態(tài)硬盤(pán)。
有的計(jì)算復(fù)雜的,cpu要高服務(wù)器
有的計(jì)算不復(fù)雜,但是進(jìn)程多,內(nèi)存多的服務(wù)器

服務(wù)器分清:計(jì)算密集,IO密集,進(jìn)程密集。

</>復(fù)制代碼

  1. nginx觀察統(tǒng)計(jì)模塊

</>復(fù)制代碼

  1. ./configure --prefix=/usr/local/nginx/ --add-module=/usr/local/ngx_http_consistent_hash_master --with-http_stub_status_module
  2. make && make install

修改nginx.conf,配置統(tǒng)計(jì)模塊參數(shù)

</>復(fù)制代碼

  1. location /status {
  2. stub_status on;
  3. access_log off;
  4. allow 192.168.1.100;
  5. deny all;
  6. }

ab工具壓力測(cè)試,觀察數(shù)據(jù)

</>復(fù)制代碼

  1. 優(yōu)化思路

對(duì)于nginx 來(lái)說(shuō),nginx請(qǐng)求,來(lái)響應(yīng)。訪問(wèn),mysql或硬盤(pán)中的.html文件等等

建立socket連接

打開(kāi)文件,并沿socket返回

建立socket連接能否很多,打開(kāi)文件是否能夠打開(kāi)很多。

socket中處理的包括:系統(tǒng)層面nginx
系統(tǒng)層面:

</>復(fù)制代碼

  1. 最大連接數(shù) somaxconn
  2. 洪水攻擊 // 不做洪水抵御
  3. 加快tcp連接回收 recycle
  4. 空的tcp是否允許回收利用 reuse

</>復(fù)制代碼

  1. echo 50000 > /proc/sys/net/core/somaxconn
  2. echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
  3. echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
  4. echo 0 > /proc/sys/net/ipve4/tcp_syncookies

nginx:

</>復(fù)制代碼

  1. // 每個(gè)子進(jìn)程打開(kāi)的連接(worker_connections)
  2. evnets {
  3. worker_connnections 10240;
  4. }
  5. // http連接關(guān)閉
  6. http {
  7. keepalive_timeout 0;
  8. }

文件中處理的包括:系統(tǒng)層面nginx
系統(tǒng)層面的限制:

</>復(fù)制代碼

  1. ulimit -n 50000 // 設(shè)置一個(gè)比較大的值

nginx:

</>復(fù)制代碼

  1. // 子進(jìn)程允許打開(kāi)的文件(worker_limit_onfile)
  2. // nginx配置文件中的全局區(qū)修改
  3. worker_limit_nofile 10000;

響應(yīng)頭中:Connection: keep-alive
防止頻繁的tcp,還保持時(shí)間的話,就浪費(fèi)

</>復(fù)制代碼

  1. http {
  2. keepalive_timeout 0;
  3. }

時(shí)間修改為0之后,Connection: close

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/22309.html

相關(guān)文章

  • Nginx 一點(diǎn)一滴 01 - 安裝運(yùn)行

    摘要:這時(shí)才發(fā)現(xiàn)上面的配置錯(cuò)誤,必須用絕對(duì)路徑,不能用形如符號(hào)卸載重裝的正確姿勢(shì)查看當(dāng)前版本版本信息這里要重定向才可以輸出到文件哦之后,進(jìn)程是重新創(chuàng)建了的里面保存的是的主進(jìn)程號(hào) GET THE CODE ganiks ? nginx-1.8.0 wget http://nginx.org/download/nginx-1.8.0.tar.gz ganiks ? nginx-1.8....

    FWHeart 評(píng)論0 收藏0
  • Nginx筆記(一)Nginx安裝

    摘要:環(huán)境準(zhǔn)備準(zhǔn)備服務(wù)器確保有網(wǎng)絡(luò)確保可用關(guān)閉規(guī)則查看規(guī)則關(guān)閉規(guī)則保險(xiǎn)起見(jiàn),再查看下查表里是否有規(guī)則有的話,也關(guān)閉關(guān)閉策略查看是否開(kāi)啟關(guān)閉安裝基礎(chǔ)庫(kù)開(kāi)始安裝訪問(wèn)官網(wǎng)復(fù)制以下源服務(wù)器上創(chuàng)建的源改成驗(yàn)證源從源安裝驗(yàn)證顯示如下啟動(dòng) 環(huán)境準(zhǔn)備 準(zhǔn)備服務(wù)器centos7.2 確保有網(wǎng)絡(luò) ping www.baidu.com 確保yum可用 yum list | grep gcc 關(guān)閉iptables規(guī)...

    shinezejian 評(píng)論0 收藏0
  • Nginx基礎(chǔ)篇(1)- Nginx的快速搭建和基本參數(shù)

    摘要:什么是多路服用的實(shí)現(xiàn)方式基本原理函數(shù)監(jiān)視的文件描述符分類,分別是和。缺點(diǎn)能夠監(jiān)視文件描述符的數(shù)量存在最大限制。三的快速搭建和基本參數(shù)方式安裝參考創(chuàng)建文件,并輸入如下內(nèi)容可選值有和。 Nginx的快速搭建和基本參數(shù) 一、Nginx簡(jiǎn)介 1. Nginx簡(jiǎn)述 Nginx是一個(gè)開(kāi)源且高性能、可靠的HTTP中間件、代理服務(wù)。 2. 常見(jiàn)的HTTP服務(wù) httpd - Apache IIS -...

    warmcheng 評(píng)論0 收藏0
  • Nginx基礎(chǔ)篇(1)- Nginx的快速搭建和基本參數(shù)

    摘要:什么是多路服用的實(shí)現(xiàn)方式基本原理函數(shù)監(jiān)視的文件描述符分類,分別是和。缺點(diǎn)能夠監(jiān)視文件描述符的數(shù)量存在最大限制。三的快速搭建和基本參數(shù)方式安裝參考創(chuàng)建文件,并輸入如下內(nèi)容可選值有和。 Nginx的快速搭建和基本參數(shù) 一、Nginx簡(jiǎn)介 1. Nginx簡(jiǎn)述 Nginx是一個(gè)開(kāi)源且高性能、可靠的HTTP中間件、代理服務(wù)。 2. 常見(jiàn)的HTTP服務(wù) httpd - Apache IIS -...

    Code4App 評(píng)論0 收藏0
  • Linux下Nginx的安裝、升級(jí)及動(dòng)態(tài)添加模塊

    摘要:新版本主進(jìn)程退出的同時(shí),舊版本主進(jìn)程將會(huì)自動(dòng)啟動(dòng)它的工作進(jìn)程。下面我們來(lái)看一下如何給運(yùn)行中的添加模塊。 原文鏈接:http://xueliang.org/article/detail/20160615172540639 系統(tǒng)基于ubuntu server 14.04.4 amd64 安裝 第一步 下載并解壓Nginx壓縮包 從Nginx官網(wǎng)下載Nginx,或者在Linux上執(zhí)行wget...

    W4n9Hu1 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<