nginx
nginx的核心配置項:
Core functionality:核心配置,Glob配置段
daemon:是否開啟為守護進程
daemon {on|off}:默認為開啟,只能使用在main段
error_log:錯誤日志定義,有存放路徑與日志等級,這個指令可以使用在main, http, mail, stream, server, location段中
error_log file [level]:file就是錯誤日志位置了,面level級別從高到低分別為debug,info,notice,warn,error,crit,alert,emerg.
include:這個指令主要是將其它獨立配置文件引用到主配置文件,使主配置文件生效,這個指令可以配置在任意位置,核心為調用其它文件
include {file|mask}:調用獨立配置文件或者mime單位類型文件,示例如下
include mime.type;調用主配置文件所在目錄下的mime.type文件,這些文件類型為nginx可識別的類型
include vhosts/.conf:調用主配置文件所在的目錄一睥vhosts目錄下的所有以.conf結尾的文件
load_module:這個指令為模塊自由裝卸載的控制指令
load_module file:file就是模塊存放位置,可配置位置為mian
lock_file:鎖文件存放位置
lock_file file:file就是文件存放位置,默認為logs/nginx.lock,可以配置位置為main
master_process {on|off}:是否開啟master進程,默認為開啟,可以配置在main段
multi_accept {on|off}:同一時間是否只接收一個連接,如果開啟,那么同一時間將接收所有新的請求,默認為關閉,只能在events段配置此指令
pid file:pid文件存放位置,file為文件位置,默認位置為主配置文件目錄下的nginx.pid,這個指令只可以配置在main段
thread_pool NAME threads=NUMBER [max_queue=NUM]:定義nginx運行線程池
use method:指明并發連接請求的處理法則,默認為epoll,配置位置為events
user USER[GROUP]:配置啟動nginx的worker進程的用戶,默認用戶,用戶組為nobody,noboduy,配置位置為main段
worker_connections NUM:一個worker最大可以進行多少個連接,默認為512,配置位置為events
worker_cpu_affinity CPUMASK…:配置worker對應的CPU,主要是一個CPU對應一個worker時配置,可以提高nginx性能,配置位置main
worker_cpu_affinity 0001 0010 0100 1000;有四個CPU,每一個CPU對就一個worker,如果此選項的值為auto,那么就是自適應
worker_priority NUM:此指令主要是對worker進程的優先級進行配置,默認優先級為0,這個優先級為nice優先級,范圍為-20到20之間,越小越優先
worker_processes {NUM|auto}:配置nginx進程啟動多少個worker進程,這個worker進程主要是跟cpu核心數有關,一般情況下一核對應下人worker進程,這個指令默認值為0,配置位置為main
nginx的部分模塊說明:
ngx_http_core_module模塊:nginx核心模塊,核心的不能再核心了
aio {on|off}:是否開啟異步IO讀寫,默認為關閉,配置位置為http,server,location,但是這個指令只有在nginx的0.8.11版本才有效
alias PATH:別名,假如訪問一個指定的url時,這個url可能并不存在,這時可以進行別名配置,使其訪問一個存在在url,配置位置為location
client_boby_timeout TIME:讀取客戶端發送請求報文的body超時時長,這個超長是兩個操作時間差的時長,默認為60s,配置位置為http,server,location
client_header_timeout TIME:讀取客戶端發送請求報文的header超時時長,同上
client_header_bufer_size SIZE:用于接收客戶端的body部分的緩沖區大小,默認為1K,配置位置http,server
client_body_temp_path PATH [level1 [level2 [level3 …]]]:配置用于存儲客戶端請求報文的body部分的臨時存儲路徑,及其子目錄結構和數量
client_body_temp_path /tmp/nginx/body_cache 1 2 2; //body緩沖目錄為/temp/nginx/body_cache,緩沖級別為1 2 2,這里的數字為幾個十六進制數組成,1代表1外十六進制組面,也就是會生成十六個目錄,后面的二就是兩個十六進制組成,也就是會生成1616種方法,也就是創建256個目錄,依此類推,一級一級,不需要再遍歷所有的文件,可以提高nginx效率
client_max_body_size SIZE:客戶端的body最大值,在抓包中的顯示為”Content-Length”,默認值為1M,配置位置為1M,配置位置為http,server
default_type MIME-TYPE:配置識別的默認mime類型,默認為text/plain,配置位置為http,server,location
directio {SIZE|off}:這個指令與aio指令配合使用,在Linux主機上開啟O_DIRECT標記,此處意味文件大于給定的大小時使用,例如directio 4m;或者是directio off
error_page CODE [=RESPONSE] uri;重定向錯誤頁面,配置位置http,server,location,在location中的if語句中
error_page 404 =200 /xxx.xxx; //將錯誤的code改為200,并將頁面定向到/xxx.xxx
etag {on|off}:是否開啟etag頭信息,默認為開啟,配置位置為http,server,location
keepalive_disable {none|BROWSER}:定義在那些瀏覽器中不使用長連接,默認為msie6,配置位置為http,server,location
keepalive_requests NUMBER:在長連接時請求的資源最大數量,默認100,配置位置為http,server,location
keepalive_timeout {TIME|header_time}:長連接超時時長,默認為75s,配置位置為http,server,location
limit_rate RATE:限制給客戶端響應的傳輸頻率,單位是bytes/second,0表示無限制
limit_except METHOD1…{…}:限制對應的請求方法之外的其它方法的允許與不允許操作,配置位置location
limit_except GET HEAD { //對GET與HEAD進行操作,允許,其它的不允許
allow 192.168.1.0/32;
deny all;
}
listen IP[:PORT]…..:定義監聽IP端口等,還有什么代理,ssl等,配置位置server
location [=|^~|~|~] uri {…}:根據請求uri進行配置,使其訪問特有的資源,配置位置server,location
符號匹配優先級:= > 無符號 > ^~ > ~|~
open_file_cache off:關閉文件緩沖,這是默認狀態,open_file_配置位置http,server,location
open_file_cacht max=N [inactive=TIME]:N為可緩存的緩存項上限,達到上限后會使用LRU算法實現緩存管理,inactive=TIME為緩沖項的非活動時長,在此處指定的時長內被命中或者未被命中的次數少于open_file_chche_min_user指令指定的次數的緩存即為非活動項;
nginx的緩沖信息:文件大小,描述符,mtime,目錄結構,文件權限
open_file_cache_errors {on|off}:是否緩存查找時發生錯誤的文件一類信息
open_file_chche_valid TIME:緩沖項有效性檢查頻率,默認為60s;
open_file_cache_min_user NUMBER:在open_file_cache的inactive參數指定時長內,至少應該被命中多少次方為活動項
root PATH:網頁文件的存放位置,配置位置為http,server,location,location中的if語句
send_timeout TIME:對于客戶端的請求進行響應的時候的超時時間,僅對兩個操作之間的時間差進行判斷
sendfile {on|off}:是否啟用sendfile的功能,默認關閉,配置位置http,server,location
server_name HOSTNAME/FQDN:定義服務器的域名或者主機名,配置位置為server
try_file file … uri:以指定的順序檢查文件,并使用第一個找到的文件進行處理,該處理在當前上下文中執行,文件路徑是根據根與別名進行定義的
try_file file1 file2 … =code:如里在指定順序中沒有找到資源,那么返回一個代碼
type {…}:響應的MIME類型,可以有多個,配置位置http,server,location
ngx_http_auth_basic_module:nginx的basic的認證
auth_basic:在認證的時候輸出的提示字符串
auth_basic “closed site”;
auth_basic_user_file:指定用戶認證的認證文件,nginx沒有獨立的生成認證文件的命令,需要使用httpd-tools包中的htpasswd進行生成
htpasswd -c -m FILE //只有在生成文件時才使用-c,如果不生成文件是不能使用-c的,會將原有的文件覆蓋
ngx_http_fastcgi_module:定義fcgi協議的模塊
fastcgi_pass IP/HOSTNAME:能往fcgi的IP或者HOSTNAME,也可以UNIX套接字文件
fastcgi_pass 192.168.10.2:9000 //通過IP,端口進行訪問后端fcgi程序
fastcgi_pass unix:/tmp/fastcgi.socket //通過unix套接字訪問后端fcgi程序
fastcgi_index NAME:訪問fcgi主頁的名字
fastcgi_index index.php; //通過fcgi訪問的主頁為index.php
fastcgi_param PAEAMETER VALUE [if_not_empty]:將指定的參數傳遞給后端的fcgi,當沒有定義此值時,會繼承上一級發送的內容
fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_cache_path PATH [level1 [level2 [level3…]]]:指定緩沖路徑與緩沖級別
fastcgi_cache_path /data/fcgicache 1 1 1; //定義一個緩沖目錄與三層緩沖
fastcgi_cache {zone|off}:定義一段內存空間為緩沖空間,默認此指令為關閉
fastcgi_cache_key STRING:定義用作緩沖項的key的字符串
fastcgi_cache_methods GET |HEAD |POST …:為那些請求類型使用緩沖
fastcgi_cache_min_uses NUMBER:定義緩沖項在緩沖空間內,非活動時間內至少要被訪問多少次才可以被認作為活動的緩沖
fastcgi_cache_valid [code …] time:不同的響應碼對就的緩沖時長
fastcgi_cache_valid 301 1h; //臨時重定向的緩沖時間為1個小時
fastcgi_keep_conn {on|off}:相當于是否開啟fastcgi的長連接,也可以對nginx有一定的優化效果
ngx_http_gzip_module模塊:進行流量壓縮的模塊
gzip on; //開啟gzip壓縮
gzip_min_length 1000; //最小為1000字節的內容才會進行壓縮
gzip_proxied expired no-cache no-store private auth; //定義nginx在做為代理服務器時,在收到代理服務器的響應時,對那些報文進行壓縮
gzip_types text/plain application/xml; //定義nginx壓縮的文件類型有那些
ngx_http_index_module模塊:可以指定響應的首頁文件的類型
index index.php index.html index.htm
ngx_http_proxy_modeule模塊:nginx的代理功能
proxy_pass URL:代理的協議,主機與資源
proxy_set_header field value:發往后端主機的請求首部的值
proxy_cache_path PATH [levels=levels] …..:定義緩沖位置,緩沖級別,內存空間域等內容
proxy_cache_path /data/proxycache levels=1:1:1 key_zone=proxy_cache:10m; //定義一個代理緩沖,緩沖文件位置為/data/proxycache,緩沖級別為1:1:1三個級別,內存空間域名與大小為proxycache:10m
proxy_cache {zone|off}:是否啟內存區域緩沖
proxy_cache_key string:緩沖中用于”鍵”的內容
proxy_cache_valid [code …] time;不同的響應碼對應的緩沖時間的不同
proxy_cache_use_stale:在那些情況下使用過時的緩沖
proxy_cache_methods GET | HEAD | POST …;對那些類型的請求進行緩沖
proxy_hide_header field:對代理響應的頭信息不予發送給客戶端,如Date,Server,X-Pad,X-Accel這些信息,默認情況下都是不會發送給客戶端的,如果想要傳遞某些信息,可以配置proxy_pass_header
proxy_connect_timeout TIME:定義與代理服務器連接的超時時間,這個值最大不應該超過75s,默認為60s
ngx_http_referer_module模塊:阻止對無效站點的訪問
valid_referers none | blocked | server_names | string …;定義referer的合法可用值
none:請求報文沒有可用的referer首部
blocked:請求報文的referer首部沒有可用的值
server_names:參數,其可以有值作為主機名或主機名模式
if ($invalid_referers) { //說明響應在定義的valid_referers之外的值時返回的代碼
return 403;
}
ngx_http_rewrite_module模塊:url重寫模塊
break:當達到一定的條件時,中斷此模塊
return:反回特定的url,類同于error_log指令
rewrite regex replacement [flag]:重寫一個url
last:如果已經匹配,就不再對同一隊列的rewrite進行遍歷,不間斷的進行循環,所以,如果其它的隊列中也含有last,有可能會變為圓環地址
break:同上進行,但是只進行一次循環,如果,本隊列匹配到url,那么就中斷了,不再繼續進循環了
redirect:重寫完成以后生成新的url,再發送給客戶端,由客戶端重新進行訪問,這個是臨時重定向
permanent:同上為永久重定向
rewrite_log {on|off}:重寫是否保存日志
set $variable value:定義變量,variable為變量名,value變值
if (condition){body}:
condition:比較字符
=|!=:對比變量與字符串是否相等
~|!~:是否屬于
~|!~*:是否屬于,并且不區分大小寫
-f|!-f:是否是一個文件
-d|!-d:是否是一具目錄
-e|!-e:文件是否存在
-x|!-x:是否可以執行
ngx_http_ssl_module模塊:進行流量加密的模塊
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; //加密協議,當然還有SSLv2,SSLv3….
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;指定啟用的密碼,密碼以openssl庫所指定
ssl_certificate /usr/local/nginx/conf/cert.pem;證書存放位置
ssl_certificate_key /usr/local/nginx/conf/cert.key;私鑰存放位置
ssl_session_cache shared:SSL:10m;ssl會話緩沖類型與大小
ssl_session_timeout 10m;ssl響應會話超時時間,默認為5分鐘
ngx_http_stub_status_module模塊:當前nginx的狀態
location /basic_status {
stub_status;
}
提供兩個虛擬主機,實現LNMP,使用不同的方法建設其后端php后進行壓測,對比其性能,后端使用np,ap的方法,壓測內容為wordpress,然后建立https
拓撲圖:
見nginx試驗
在nginx_proxy端進行配置
安裝nginx程序,如果使用yum源安裝nginx程序,那么需要使用epel源
yum -y install nginx
進入主配置文件:
注釋server配置段,并按照include指令所指定的目錄創建一個存放主機的文件
vim /etc/nginx/conf.d/vhost.conf
在配置文件中添加如下內容
server {
listen :80;
#root /data/www;
location / {
proxy_pass http://172.18.250.37:80;
}
}
啟動服務:
systemctl start nginx
在ap(就是httpd+php)端配置
安裝ap
yum -y install httpd php php-mysql
vim /etc/httpd/conf/httpd.conf
DirectoryIndex index.php index.html index.html.var
新建一個php網頁
vim /var/www/html/index.php
<?php
phpinfo();
?>
啟動服務:
service httpd start
在client端進行壓測
進行壓測:
ab -n 2000 -c 500 http://172.18.252.96:80/index.php
返回值:
Time per request: 3222.389 [ms] (mean)
Time per request: 6.445 [ms] (mean, across all concurrent requests)
將ap修改為np,進行壓測
卸載ap
yum -y remove httpd php
安裝np
yum -y install nginx php-fpm
配置php-fpm主配置文件
vim /etc/php-fpm.d/www.conf
將監聽端口修改為如下配置
listen = 0.0.0.0:9000
配置nginx的配置文件
vim /etc/nginx/conf.d/virtual.conf
修改配置如下
將此中的server注釋去掉,server配置如下
server {
listen 8080;
#listen somename:8080;
#server_name somename alias another.alias;
server_name www.a.com;
root /data/www;
index index.php index.html index.htm;
location ~ .php$ {
fastcgi_pass localhost:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
修改proxy服務器的proxy_pass指令端口為8080;
進行壓力測試:
ab -n 2000 -c 500 http://172.18.252.96/index.php
設備網卡巖了,說明這個性能還不如ap,重啟,重新測試
Time per request: 890.024 [ms] (mean)
Time per request: 1.780 [ms] (mean, across all concurrent requests)
這個np還是比ap強的,強了一倍不止啊,很給力啊
配置wordpress與pam
配置mysql:
安裝mysql
yum -y install mariadb-server
啟動mysql
systemctl start mariadb
配置數據庫
mysql -u root
create database wordpress;
grant all privileges on *. to test@’localhost’ identified by ‘test’;
grant all privileges on . to test@’127.0.0.1′ identified by ‘test’;
grant all privileges on . to test@’%’ identified by ‘test’;
\q
將wordpress解壓到網頁根目錄
修改權限
chmod 777 -R wordpress
訪問即可
進行壓測:
ab -n 2000 -c 500 http://172.18.252.96/wordpress
這個很快,比index.php還快,不知道為什么
配置一個url重寫方便點
在np上的/etc/nginx/conf.d/vhost.conf中添加如下內容:
location / {
rewrite ^([/^]+/) $1/wordpress break; //這樣寫的目地是,不知道為什么,IP后面老是出現兩個’/’,所以這里就匹配一個’/’就好了
}
在proxy上配置一個CA
cd /etc/pki/CA/
生成CA的私鑰:
openssl genrsa -out private/cakey.pem 2048
生成自簽證書
openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 3650
生成文件
touch index.txt serial
echo 01 > serial
CA配置完成
生成nginx的CA
cd /etc/nginx/conf.d/
openssl genrsa -out nginx.key 1024
openssl req -new -key nginx.key -out nginx.pem -days 365
給CA進行確認
openssl ca -in nginx.pem -out nginx.crt -days 365
配置nginxssl:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name www.tom.com;
ssl_certificate “/etc/nginx/conf.d/nginx.crt”;
ssl_certificate_key “/etc/nginx/conf.d/nginx.key”;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.18.250.37:80;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
同理,配置php服務器上的ssl使其成為全站ssl,如果只有是部分ssl,那么php上需要做重寫,不然訪問不了https,需要將https重寫成http后就可以了
原創文章,作者:gaomei,如若轉載,請注明出處:http://www.www58058.com/75071