一、nginx安装及配置文件(rpm包安装要配置epel源才可以)
1、编译安装
#yum -y groupinstall "Development Tools" "Server Paltfrom Development" 安装gcc zlib 等依赖包
#yum -y install pcre-devel 安装重写引擎,组包不会安装
#groupadd -r nginx
#useradd -r -g nginx nginx
#tar xf nginx-1.4.7.tar.gz
#cd nginx-1.4.7
#./configure --help | less #查看要安装的路径
# ./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--sbin-path=/usr/sbin/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/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-http_flv_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \ 用户请求临时文件目录
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \ 反向代理缓存临时文件目录
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ 转发fastcgi临时文件目录
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre (要记录安装步骤可以管道 | tee /tmp/nginx.out )
#make &&make install
#which nginx #查看nginx的安装路径
/usr/sbin/nginx
#/usr/sbin/nginx -h 查看配置参数
#/usr/sbin/nginx -t #检查语法错误
注,可能会报错,没有nginx用户或/var/tmp下没有nginx目录,创建即可!
#useradd -r nginx
#/usr/sbin/nginx -t
#mkdir /var/tmp/nginx
#/usr/sbin/nginx -t
#/usr/sbin/naginx #启动nginx#ss -tnl
#ps -aux | grep nginx # 查看nginx进程,master以root身份运行,worker以nginx身份运行
root-----------master
nginx---------worker
root-----------nginx
2、设置开机自启动
#killall nginx 杀掉nginx进程
#vim /etc/rc.d/init.d/nginx #为nginx提供SysV init脚本
脚本见:http://liwenjia.blog.51cto.com/2656598/1953623
#chmod +x /etc/rc.d/init.d/nginx #为此脚本赋予执行权限
#chkconfig --add nginx #添加开机启动
#chkconfig nginx on
# service nginx start
二、ngxin 配置文件及优化详解
1、nginx的配置文件说明
user username 指定运行worker进程的用户和组
pid /path/to/pidfile_name 指定nginx的pid文件
worker_rlimit_nofile # ;指定一个worker进程所打开的最大文件数
worker_rlimit_sigpengding # ; 设定每个用户能够发往worker进程的信号的数量
2、优化性能相关的配置
(1)、worker_processes # ; worker进程的个数;通常其数字应该是CPU的物理核心数减1
(2)、work_cpu_affinity cpumask …… cup掩码
例如 work_processes 6;
work_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000;
表示若系统有100个进程,这6个nginx进程运行(绑定)在这6颗CPU上。
(3)、ssl_engine device; SSL硬件加速,在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备;比如nginx能支持http10000个请求,如果是HTTPS能支持2000就不错了,所有这里用配置来着SSL加速请求。
(4)、time_resolution t; 每次内核时间调用返回时,都会使用gettimeofday()来更新nginx缓存时钟;timer_resolution 用于定义每隔多久才会由gettimeofday()更新一次缓存时钟:x86_64系统上,gettimeofday()代价已经很小了,可以忽略此项,适合老服务器。
(5)、worker_priority nice ; worker 进程的优先级 ;-20,20之间的值;
当然还有网络方面的优化参数,后面再学习。
3、事件相关的配置
(1)、accept_mutex [on|off]
是否打开nginx的负载均衡锁,此锁能够让多个worker进程轮流的、序列化的与新的客户端建立连接,而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不再将请求调度此worker;默认打开
(2)、lock_file /path/to/lock_file; lock文件
(3)、accept_mutex_delay #ms;
accept锁模式中,一个worker进程为取得accept锁的等待时长;如果某worker进程在某次试图取得锁时失败了,至少要等待#ms才能再一次请求锁;默认500ms
(4)、multi_accept on |off 是否允许一次性响应多个用户请求;默认off
(5)、use [ epoll | rtsig | select | poll] 定义使用的事件模型,建议让nginx自动选择;
(6)、worker_connections #; 每个worker 能够并发响应最大请求数;此参数值应该和worker_rlimit_nofile 相等或比worker_rlimit_nofile小点,如果是nginx代理服务器,worker_rlimit_nofile应该是worker_connectionns的2倍。
4、用于调试、定位问题:只调试nginx时使用
(1)、daemon [on |off ]; 是否让nginx运行后台,默认on ,调试时可以设置为off,使得所有信息去接输出控制台
(2)、master_process on | off
是否以master/worker模式运行nginx,默认为on;调试时可设置为off 以方便追踪;
(3)、error_log /path/to/error_log level;
错误日志文件及其级别:调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能,默认为error级别。
5、nginx 的http功能
必须使用虚拟主机来配置站点:每个虚拟主机使用一个server{ }段配置;
非虚拟主机的配置或公共配置,需要定义在server之外,http之内;
http{
directive value;
server{
}
}
(1)、server{} 定义一个虚拟主机,nginx支持使用基于主机名或ip的虚拟主机
(2)、listen address [:port]
default_server:定义此server为http中默认的server,如果所有的server中没有任何一个listen使用此参数,那么第一个server即为默认server;
rcvbuf=SIZE 接受缓冲大小
sndbuf=SIZE 发送缓冲大小
ssl :https server
(3)、server_name [……]
server_name 可以跟多个主机名,名称中可以使用通配符和正则表达式(通常以~开头)
当nginx收到一个请求时,会取出其首部的server的值,而后跟众server_name进行比较,比较方式:
1、先做精确匹配:www.mageedu.com
2、左侧通配符匹配:*.mageeud.com
3、右侧通配符匹配:www.abc.com,www.*
4、正则表达式匹配:~^.*\.mageedu\.com$
(4)、server_name_bash_bucket_size 32|64|128;
为了实现快速主机查找,nginx使用hash表来保存主机名;
(5)、location [ = | ~ | ~* | ^~ ] uri {...}
location @name
功能:允许根据用户请求的URI来匹配指定的location以进行访问配置;匹配到时,将被location块中的配置所处理:比如 http://www.magedu.com/p_w_picpaths/logo.gif
= : 精确匹配
~ :正则表达式模式匹配,匹配时区分字符大小写
~* :正则表达式模式匹配,匹配时忽略字符大小写
^~ : URI前半部分匹配,不检查正则表达式
http://www.magedu.com/index.html
http://www.magedu.com/documents/index.html
http://www.magedu.com/p_w_picpaths/index.html
http://www.magedu.com/p_w_picpaths/a.jpg
匹配优先级:
字符字面量最精确匹配,正则表达式检索(由第一个匹配到所处理)
6、文件路径定义
1、root path 设置web资源路径,用于指定请求的根文档目录
location / {
root /www/htdocs;
}
location ^~ /p_w_picpaths/ {
root /web;
}
访问http://www.magedu.com/p_w_picpaths/b.html ,如果匹配第一个location ,b.html在/www/htdocs/p_w_picpaths/ 下 ,如果匹配第二个location,b.html则放在/web/p_w_picpaths/ 下,这就是root的作用。
三、实战nginx的配置和使用
1、虚拟主机
server {
listen 80;
server_name www.b.org;
root /www/html;
}
2、访问控制
基于ip地址做控制
deny 192.168.1.100
allow 192.168.0.0/24
3、用户认证实例
基于目录做控制要放在location中,如
location /admin/ {
root /www/b.org;
auth_basic "admin_area";
auth_basic_user_file /etc/naginx/.htpasswd;
}
4、建立下载站点autoindex 模块
location /download/ {
root /www/b.org/;
autoindex on;
}
5、referer 模块用于防盗链
(1)定义合规的引用
valid_referers none | blocked |server_names |string……
(2)拒绝不合规的引用
if ($invalid_referer) {
rewrite
}
6、URL rewrite 地址重定向
如,域名跳转,URL跳转,地址重定向
语法:rewrite regex replacement [flag];
# rewrite 正则 重写 标志位
如:location /{
root /www/b.org;
rewrite ^/p_w_picpaths/(.*) $ /imgs/$1;
}
说明:如果访问以p_w_picpaths目录开头的任意文件(.*),都返回imgs下的任意文件,
此$1=(.*)如:http://www.b.org/p_w_picpaths/a.jpg---->http://www.b.org/imgs/a.jpg
标准位:标志位防止请求的链接再次循环匹配条件,
last:一旦被当前规则匹配并重写后,立即停止检查后续的其他rewrite规则,而由通过重写后的规则重新发起请求。
break:一旦被当前规则匹配并重写后,立即停止后续的其他rewrite规则,而后继续由nginx进行后续的操作。
redirect:返回302临时重定向:
permanent:返回301永久重定向:
注意:nginx最多循环10次,超出之后会返回500错误;
一般rewrite写在location中时,都配合break使用,防止死循环,或者写入if上下文中。
例:location /download/ {
root /www/b.org/;
rewrite ^/download/(.*\.( jpg | gif | jpeg | png ))$ /p_w_picpaths/$1 last ;
说明:/download/下的任意已jpg、gif、jpeg、pgn结尾的文件,重定向到p_w_picpaths下,在p_w_picpaths下创建一个1.jpg 的图片,访问/download/时能看到此图片,说明成功了。
rewrite_log on | off #是否把重写过程记录错误日志中,日志级别为notice时生效,默认off。
return code:用于结束rewrite规则,并且为客户端返回状态码有204 400 402 500-504 等。
7、if (condition)
转载于:https://blog.51cto.com/liwenjia/1889007