nginx安装配置
Nginx介绍
Engine X是一个高性能、高并发的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx优点
高并发:Nginx 是一个很强大的高性能Web和反向代理服务器,它具有很多非常优越的特性。在连接高并发的情况下,Nginx是Apache服务器不错的替代品,能够支持高达 50,000 个并发连接数的响应。
负载均衡器·:Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。
代理服务器:Nginx本身就是一个反向代理服务器,可支持邮件服务器代理以及http代理
nginx和apache对比
1.轻量级,同样起web 服务,比apache 占用更少的内存及资源
2.抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
3.高度模块化的设计,编写模块相对简单
4.配置简洁易懂,正则配置让很多事情变得简单
编译安装nginx
安装所需环境包组: yum -y groupinstall "Development Tools" "Server Platform Development"
安装所需要依赖包: yum -y install pcre-devel openssl-devel zlib-devel
进入软件包根目录配置程序:./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
编辑并安装:make && make install
###解释
安装目录路径为:/usr/local/nginx
配置文件路径为:/etc/nginx/nginx.conf
错误日志路径为:/var/log/nginx/error.log
访问日志路径为:/var/log/nginx/access.log
pid存放路径为:/var/run/nginx.pid
套接字文件路径为:/var/run/nginx.lock
指定用户和组为nginx 加载ssl模块
rpm安装配置
nginx官方rpm包下载地址:http://nginx.org/packages/centos/7/x86_64/RPMS/
我们这里下载的nginx-1.10.0-1.el7.ngx.x86_64
可以直接使用yum –y install nginx-1.10.0-1.el7.ngx.x86_64.rpm 可以解决依赖问题
查看程序安装信息:
主配置文件 /etc/nginx/nginx.conf
我们设置虚拟在/etc/nginx/conf.d/default.conf内设置
http{}--->server{}--->location{}
http{}字段内可以包含多个server{}字段 server{}内可以包含多个Location{}字段
service :定义虚拟主机
Location:定义访问规则
Location:匹配优先级:=, ^~, ~/~*,不带符号;
nginx默认程序存放路径为:/usr/share/nginx/html下面;使用ss -tnl查看80端口是否正常运行,如果主机之前安装有httpd服务请关闭或者更改其一端口即可;
Alias别名设置,仅能用于Location上下文
定义客户请求的相关配置
设定保持链接的超时时长;0表示禁止长连接;默认为75s
keepalive_timeout timeout [header_timeout]
在一次长连接中所允许请求的资源的最大的数量,默认为100;
keepalive_requests number;
对那种浏览器禁用长连接
keepalive_disable none | browser ...;
向客户端发送响应报文的超时时长,此处,是指两次写操作之间的间隔时长。
Send_timeout time;
用于接收客户端请求报文的body部分的缓存大小;默认为16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置;
client_body_buffer_size size;
设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量;
client_body_temp_path path [level1 [level2 [level3]]];
16进制的数字;
client_body_temp_path path /var/tmp/client_body 1 2 2
限制响应给客户端的传输速率,单位是bytes/second,0表示无限制;
limit_rate rate;
限制对指定的请求方法之外的其它方法的使用客户端;允许192.168.1.0使用GET请求方法,其他全部拒绝。
limit_except GET {
allow 192.168.1.0/32;
}
文件操作优化配置:
是否启用aio功能
Aio on|off | threads[=pool];
启用O_DIRECT标记,此处意味文件大于等于给定的大小时使用,例如directio 4m;
directio size | off;
open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以缓存以下三种信息:
(1) 文件的描述符、文件大小和最近一次的修改时间;
(2) 打开的目录结构;
(3) 没有找到的或者没有权限访问的文件的相关信息;
max=N:可缓存的缓存项上限;达到上限后会使用LRU算法实现缓存管理;
inactive=time:缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_users指令所指定的次数的缓存项即为非活动项;
缓存项有效性的检查频率;默认为60s;
open_file_cache_valid time;
在open_file_cache指令的inactive参数指定的时长内,至少应该被命中多少次方可被归类为活动项;
open_file_cache_min_uses number;
是否缓存查找时发生错误的文件一类的信息;
open_file_cache_errors on | off;
用户访问权限设置:
实现基于用户的访问控制,使用basic机制进行用户认证;
ngx_http_stub_status_module模块输出nginx的基本状态信息;
location /basic_status {
stub_status;
}
Active connections: 活动状态的连接数;
accepts:已经接受的客户端请求的总数;
handled:已经处理完成的客户端请求的总数;
requests:客户端发来的总的请求数;
Reading:处于读取客户端请求报文首部的连接的连接数;
Writing:处于向客户端发送响应报文过程中的连接数;
Waiting:处于等待客户端发出请求的空闲连接数;
ngx_http_rewrite_module模块;
注意:如果在同一级配置块中存在多个rewrite规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,因此,隐含有循环机制;[flag]所表示的标志位用于控制此循环机制;
如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端;
Flag标记:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重启新一轮循环;
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环;
redirect:重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;不能以http://或https://开头;返回302临时重定向 地址栏会显示跳转后的地址
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;返回301永久重定向 地址栏会显示跳转后的地址
可以将重新记录存放于日志当中;rewrite_log on | off;
引入一个新的配置上下文;条件满足时,执行配置块中的配置指令:server,Location
if (condition) {…}
condition选项:
比较操作符:
==:模式匹配,精确匹配;
!=:模式不匹配,精确匹配;
~:模式匹配,区分字符大小写;
~*:模式匹配,不区分字符大小写;
!~:模式不匹配,区分字符大小写;
!~*:模式不匹配,不区分字符大小写;
文件及目录存在性判断:
-f和!-f判断是否存在文件
-d和!-d判断是否存在目录
-e和!-e判断是否存在文件或目录
-x和!-x判断文件是否可执行
用户自定义变量:Set $variable value;
$args 此变量与请求行中的参数相等
$content_length 等于请求行的“Content_Length”的值。
$content_type 等同与请求头部的”Content_Type”的值
$document_root 等同于当前请求的root指令指定的值
$document_uri 与$uri一样
$host 与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样
$limit_rate 允许限制的连接速率
$uri 等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index
$server_protocol 等同于request的协议,使用“HTTP/1.0”或“HTTP/1.1”
$server_port 请求到达的服务器的端口号
$server_name 请求到达的服务器名
$server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。
$request_uri 含有参数的完整的初始URI
$request_method 等同于request的method,通常是“GET”或“POST”
$request_filename 当前请求的文件的路径名,由root或alias和URIrequest组合而成
$request_body_file
$remote_user 等同于用户名,由ngx_http_auth_basic_module认证
$remote_port 客户端port
$remote_addr 客户端ip
$query_string 与$args一样
指定返回客户端代码:return 400;支持被返回的代码有:204,400,402 - 406,408,410,411,413,416,和500 - 504。
gzip压缩模块
Gzip:开启网站压缩功能:
Gzip on|off 开启
gzip_comp_level level; 压缩等级
gzip_min_length legth; 启用压缩功能的响应报文大小阈值;
gzip_proxied expired no-cache no-store private auth;
nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
off:对代理的请求不启用
no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的Cache-Control的值为此三者中任何一个,则启用压缩功能;
gzip_types mime-type ...;
压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;
客户端开启前效果:
客户端开启后效果:
ngx_http_fastcgi_module模块:
安装php 和php-fpm:yum –y install php php-fpm
编辑nginx配置文件:vim /etc/nginx/conf.d/vhosts.conf
location ~ \.php$ {
root /usr/share/nginx/html/R1;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/R1$fastcgi_script_name;
include fastcgi_params;
}
使用nginx –t查看配置文件是否存在语法错误
启动nginx与php-fpm
systemctl start nginx
systemctl start php-fpm
浏览器查看效果
查看fpm运行状态
在/etc/php-fpm.d/www.conf里面开启pm_status和ping并设置location即可
通过/pm_status和/ping来获取fpm server状态信息;
location ~* ^/(pm_status|ping)$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
}
效果图 :
定义fastcgi的缓存;缓存位置为磁盘上的文件系统,由path所指定路径来定义;
levels=levels:缓存目录的层级数量,以及每一级的目录数量;levels=ONE:TWO:THREE
leves=1:2:2
keys_zone=name:size
k/v映射的内存空间的名称及大小
inactive=time
非活动时长
max_size=size
磁盘上用于缓存数据的缓存空间上限
fastcgi_cache zone | off;
调用指定的缓存空间来缓存数据;http, server, location
fastcgi_cache_key string;
定义用作缓存项的key的字符串;
fastcgi_cache_methods GET | HEAD | POST ...;
为哪些请求方法使用缓存;
fastcgi_cache_min_uses number;
缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指定的次数方可被认作活动项;
fastcgi_cache_valid [code ...] time;
不同的响应码各自的缓存时长;
示例:
http {
...
fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2:1 keys_zone=fcgi:20m inactive=120s;
...
server {
...
location ~* \.php$ {
...
fastcgi_cache fcgi;
fastcgi_cache_key $request_uri;
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301 1h;
fastcgi_cache_valid any 1m;
...
}
...
}
...
}
原创文章,作者:闹钟哥,如若转载,请注明出处:http://www.178linux.com/58439