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.178linux.com/75071