浅谈Nginx做web所用到的指令
来源:互联网 发布:dota2数据分析网站 编辑:程序博客网 时间:2024/05/20 09:05
一、前言
在上次博客中谈到编译安装Nginx,以及Nginx一些特性。在一些企业中Nginx备受青睐,不仅在反向代理上面有着强大的功能,同时在web上也有这不俗的优点。现在谈谈Nginx作为web时的配置。
在Nginx中,使用yum安装与自己手动编译安装配置文件有些许差别。使用yum安装会在/etc/nginx/目录下生成nginx.conf主配置文件以及在/etc/nginx/conf.d目录下生成default.conf配置文件。而编译安装则要自己指定配置文件所在的目录,同时会在该目录下生成nginx.conf的配置文件。这里以yum安装为例。
注意,Nginx是从epel源中安装的,要自己配置yum的epel源。
在配置文件中分为三个配置段:main、event、http。所有的指令都要以分号结尾。
二、main与event配置段的模块
main配置段也叫作主配置段,用于调试、定位问题,正常运行必备的配置。event配置段用于优化性能的配置,与事件相关的配置。
正常运行必备的配置:
1、user nginx;
指定运行的worker进程的用户和组,组可以省略,如果在编译过程中指定了用户与组,那么在主配置文件中这一选项可能是被注释的
2、pid /var/run/nginx.pid;
指定nginx守护进程的pid文件
3、error_log /var/log/nginx/error.log;
定义错误日志所在文件
性能优化相关配置:
1、worker_processes auto;
worker进程的个数,通常应该略少于CPU物理核心数
2、worker_rlimit_nofile number;
指定所有worker进程所能够打开的最大文件句柄数;
对于Linux来讲,一切皆文件。当nginx作为服务器来监听在某一个套接字上,都需要打开一个套接字文件。而一个进程所能够打开的最大套接字数目为1024。而当响应用户时,需要使用套接字文件来接受用户的请求从而建立连接。对于一个并发量打的服务器来说,1024个套接字文件实在是太少了,所以这里要将number修改得尽量大一些。
3、worker_cpu_affinity auto [cpumask …];
能够将nginx进程绑定在CPU上。但是在还是不能避免cpu进行进程切换。因为当有进程调度到CPU上时,nginx的进程还是要被调度出去,当nginx的进程需要运行时再调度回来,nginx属于这个CPU,但是这颗CPU不属于nginx进程。但是,虽然CPU的绑定没有避免进程切换,但是带来了另外一个结果,那就是nginx进程不需要调度到另外的CPU上面,这就导致nginx在该CPU上面缓存的大量数据不会被丢失。这就提升了缓存的命中率了。
优点:提升缓存的命中率
缺点:进程切换还是会产生额外的消耗
4、worker_processes number | auto;
设定worker进程nice值;
nice值越小,优先级越高,会被优先调度到CPU上运行
事件相关配置:
1、accept_mutex on | off;
maser调度用户请求至各worker进程时使用的负载均衡。on表示让多个worker轮流的,序列化的去响应新请求
2、lock_file file;
accept_mytex使用到的锁文件路径
3、use method;
指明使用的事件模型,建议让nginx自行选择
4、worker_connections number;
单个worker进程所能够处理的最大并发连接数
用户用于调试与定位问题设置:
1、daemon on | off;
是否以守护进程方式运行nginx,调试时应该设置为off
2、master_process on | off;
是否以master/woker模型来运行nginx
注意,若要使用debug,需要在编译nginx时使用–with-debug选项
三、http配置段的指令
配置框架:
http{ ... server { #每个server类似于httpd中的<VirtualHost>,同时可以有多个 localtion URL { ##类似于httpd中的<Location>,用于定义URL与本地文件系统的映射关系,可以有多个 root "/path/to/somedir"; } ... } server { ... }}
1、基于端口的虚拟主机
server { listen port; server_name xxx;}
2、server_name NAME […]
后可跟多个主机,名称还可以使用正则表达式(~)或者通配符
(1) 先做精确匹配检查,如:www.xxx.com
(2) 左侧通配符匹配检查,如:*.xxx.com
(3) 右侧通配符匹配检查,如:mail.*
(4) 正则表达式匹配检查,如:~^.*.xxx.com$
(5) default_server
3、root path
设置资源路径映射:用于指明请求的URL所对应的资源所在的文件系统上的起始路径
4、location [ = | ~ | ~* | ^~ ] uri {…}
功能:允许根据用户请求的URI来匹配定义的个location,匹配到时,此请求将被相应的location配置块中的配置所处理。
=:精确匹配检查
~:正则表达式模式匹配检查,区分字符大小写
~*:正则表达式模块匹配检查,不区分字符大小写
^~: URI的前半部分匹配,不支持正则表达式
匹配的优先级:精确匹配(=) > ^~ > ~ > ~* >不带任何符号的有路径的location >不带任何符号的没有路径的location(/)
server { listen 80; server_name www.xx.com; location / { #用户在浏览器中输入地址,看能否与之匹配 root "/vhosts/web1"; } location /images/ { root "/vhosts/images"; }特别注意:这个表示http://www.magedu.com/images/a.jpg --> /vhosts/images/images/a.jpg。相当于系统从/vhosts/images目录下去找location匹配到的/images/文件。如果用户输入的是/images/1.jpg,那么系统就去/vhosts/images/images/目录下去找1.jpg location ~* \.php$ { fcgipass }}
5、alias path: 与location相似,不要搞混了
用户location配置段,定义路径别名
location /images/1.jpg { root "/vhosts/web1";}location /images/ { alias "/www/pictures";}http://www.magedu.com/images/1.jpg --> /www/pictures/1.jpg这个的别名跟root定义的路径不同,别名系统不需要去images目录下去找文件,而是直接根据定义的别名路径下去找文件
6、error_page code […] [=code] URI | @name
根据http响应状态码来指明特定的错误页面,可以定义在location中,可以定义在server中,也可以定义在http中
error_page 404 =200 /404_customed.html #这里的/是该主机目录下的文件[=code]: 以指定的响应码进行响应,而不是默认的原来的响应,默认表示以新资源的响应码为其响应码
这个一般适用于不想让别人看见出错信息,让出错信息能够显示得更加人性化一点
7、基于IP的访问控制,一般在location中添加
allow ip
deny ip
例如:允许某一个网段访问,拒绝全部
allow 192.168.64.129;
deny all;
8、基于用户做访问控制,basic, digest;
定义在location中
location / { root "/vhosts/web1"; auth_basic "Only for VIP"; auth_basic_user_file /etc/nginx/users/.htpasswd;}# yum install httpd //这个命令是由httpd这个包提供# mkdir /etc/nginx/user/.htpasswd# passwd -c -m /etc/nginx/user/.htpasswd tom输入密码
9、https服务
生成私钥,生成证书签署请求,并获得证书
在nginx配置文件中/etc/nginx/nginx.conf最末尾有一段配置文件,打开并修改该配置文件#server {# listen 443 ssl;# server_name www.magedu.com; 主机名# ssl_certificate /etc/nginx/ssl/nginx.crt; 证书存放位置# ssl_certificate_key /etc/nginx/ssl/nginx.key; 私钥存放位置# ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root /vhosts/web1;# index index.html index.htm;# }#}
10、stub_status
仅能用于location上下文,表示服务器的状态页面
location /status { stub_status on; allow 192.168.64.129; deny all;}
结果实例:
Active connections: 6 #当前所有处于打开状态的连接数
server accepts handled requests
241 241 431
(1) 已经接受过的连接数
(2) 已经处理过的连接数
(3) 已经处理过的请求数,在”保持连接”模式下,请求数量可能会多余连接数量
Reading: 0 Writing: 1 Waiting: 5
Reading: 正处于接受请求状态的连接数
Writing:请求已经接受完成,正处于处理请求或者发送响应的过程中的连接参数
Waiting:保持连接模式,且处于活动状态的连接数
11、对用户的访问路径进行重写
定义在配置文件的location中
例如:...rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;rewrite ^/imgs/(.*\.jpg)$ /images/$1 break;...
flag:
last: 一旦此rewrite规则重写完成后,就不再被后面其他的rewrite规则进行处理,而是有User Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程
break:一旦此rewrite规则重写完成后,有User Agent对新的URL重新发起请求,且不再会被当前location内的任何rewrite规则所检查
redirect:以302响应码(临时重定向)返回新的URL
permanent:以301响应码(永久重定向)返回新的URL
12、if
语法:if (condition) {…}
应用环境:server, loaction
condition:
(1) 变量名:
变量值为空串,或者以”0”开始,则为false,其他的均为true
(2) 以变量为操作数构成的比较表示式
可使用=, !=类似的比较操作符进行测试
(3) 正则表达式的模式匹配操作
~: 区分大小写的模式匹配检查
~*: 不区分大小写的模式匹配检查
!~和!~*: 对上面两种测试取反
(4) 测试路径为文件可能性:-f, !-f
(5) 测试指定路径为目录的可能性:-d, !-d
(6) 测试文件的存在性:-e, !-e
(7) 检查文件是否有执行权限:-x, !-x
例如:if ($http_user_agent ~* MSIE) { rewrite ^(.*)$ /msie/$1 break;}$http_user_agent: 这是官网中定义的变量,表示用户浏览器类型MSIE:表示微软浏览器rewrite ^(.*)$ /msie/$1 break; 表示将用户的访问地址重定向到/msie目录下
这个是很有必要的,比如用户用手机访问一个网站与用户用电脑访问一个网站,显示出来的效果是完全不同的。根据不同的浏览器返回不同的站点
13、防盗链
location ~* \.(jpg|gif|jpeg|png)$ { valid_referer none blocked www.xxx.com; 表示不对那些网络中的主机不做限制 if ($invalid_referer) { rewrite ^/ http://www.xxx.com/403.html; 如果被限制的用户访问了图片,那么则进行重写 }}
–end–
- 浅谈Nginx做web所用到的指令
- web所用到的技术
- .NET做项目(web和winforms)所用到的N层架构
- .NET做项目所用到的N层架构
- asp.net web开发所用到的技术
- 浅谈Web网站架构演变过程及各阶段所用的技术和架构设计
- 浅谈Web网站架构演变过程及各阶段所用的技术和架构设计
- abap 所用到的tcode
- Nginx做web服务器的介绍
- 浅谈web服务器—Nginx
- 浅谈web服务器—Nginx
- 我所用到的有用的网址!!!
- voc 做目标检测中所用到的AP, http://blog.csdn.net/a1154761720/article/details/50864994
- 我所用到的WEB2.O网站......
- 项目中所用到的一些xx
- 导出EXCEL所用到的类
- 分清加密时所用到的概念
- 每天checklist所用到的T-CODE...
- 垃圾回收机制
- 与前端交互设计工具类
- 问题 E: QAQ & 君临天下 || 天行九歌
- 【博览网】面向对象程序设计(下)——第二周课程笔记
- 8-12
- 浅谈Nginx做web所用到的指令
- c++ try catch throw 简单用法
- 左边固定宽度右边自适应的三种方法
- HDU
- RN演示类似购物车清空的功能, 异步存储AsyncStorage
- Ending Learning for Day 4
- Laravel chmod(/var/dev/project/storage/oauth-public.key):操作失败:不允许操作
- 2017.8.11 总结
- 【python】输出列表元素,以空格/逗号为分隔符