设为首页 收藏本站
查看: 814|回复: 0

[经验分享] nginx特性及基本配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-23 09:14:52 | 显示全部楼层 |阅读模式
Nginx全称为engine x,由于调用了libevent这个高性能的网络库,使得nginx的性能相对于其他web服务更加强悍。它还支持事件驱动机制、异步I/O、支持内存映射等这些比较高效的功能。
Nginx的特性:
扩展性:nginx是模块化设计,有比较好的扩展性,但是nginx中的模块不支持动态装卸载,只能在扩展的时候直接静态编译进nginx中,随着nginx的启动而启动。
高可靠性,这种高可靠性是由于nginx的工作机制所实现的,nginx在工作时首先提供一个主控进程,这个主控进程并负责读取并验证配置文件、创建关闭或绑定套接字、启动终止维护实际工作子进程的个数、在线加载新配置文件、完成版本的平滑升级等,接收、响应用户请求,实际工作是由主进程生成的子进程完成的,这些子进程负责缓存加载、响应用户请求、缓存管理(cache managre)等。
Nginx还具有低内存消耗,这种特性是由于nginx是一个线程响应N个请求实现的,据说10000个keep-alive状态的连接仅消耗2.5MB内存。
支持热部署,如果配置文件更新或版本升级,在这期间不用重启或关闭NGINX,新配置或版本完成配置后会自动生效。
NGINX的基本功能:
1、  nginx是一个可以提供静态资源的web服务器,可以缓存打开的文件描述符(提升打开文件性能的一种方式);
2、  支持http、smtp、pop3协议的反向代理服务器(缓存加速+反代);
3、  可作为负载均衡调度器;
4、  支持fastcgi协议,能够与fpm模式的http服务器共同提供lnmp;
5、  模块化(非DSO机制)、支持过滤器、SSI及图像大小调整;
6、  支持SSL
扩展功能:
1、基于名称和IP的虚拟主机;
2、支持keepalive;
3、支持平滑升级;
4、定制访问日志、支持使用日志缓冲区提供日志存储性能;
5、支持url rewrite;
6、支持路径别名;
7、支持基于IP及用户的访问控制;
8、支持速率限制,支持并发数限制。
NGINX的基本架构特性:看图自己理解
wKioL1WGTrSSQbSyAARTO31f4mY180.jpg
NGINX安装方法:
编译安装NGINX
安装前确认已安装Development Tools、Server Platform Development、pcre-devel(url重写需要用到)
groupadd –r nginx
useradd –g nginx –r nginx
./configure
         --prefix=/usr/local/nginx安装位置
--conf-path=/etc/nginx/nginx.conf配置文件存放位置
--user=nginx 用户
--group=nginx明组
--error-log-path=/var/log/nginx/error.log错误日志路径
--http-log-path=/var/log/nginx/access.log访问日志路径
--pid-path=/var/run/nginx/nginx.pid指明pid文件路径
--lock-path=/var/lock/nginx.lock锁文件存放位置
--with-http_ssl_module启用ssl模块
--with-http_stub_status_module启用状态页面模块
--with-http_gzip_static_module启用压缩模块
--with-http_flv_module启用流媒体flv模块
--with-http_mp4_module支持流媒体mp4模块
--http-client-body-temp-path=/var/tmp/nginx/client
--http-proxy-temp-path=/var/tmp/nginx/proxy
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
make && make install
mkdir -pv/var/tmp/nginx/{client,proxy,fastcgi,uwsgi}

nginx配置:
修改配置使之重新生效:nginx -s [reload | stop | quit | reopen]
nginx服务运行的基本配置:(main配置)
1、user USERNAME[GROUPNAME];指定运行worker进程的用户和组;
2、pid /path/to/PID_FILE;指定nginx守护进程的pid文件;可以指定写成安装时的路径pid /var/run/nginx/nginx.pid;
3、worker_rlimit_nofile#;指定所有worker进程所能够打开的最大文件句柄数;
性能优化相关配置:
1、worker_processes #;指明打开worker进程的个数;通常应该略少于CPU物理核心数;(最常使用,一般会比物理核心数)
2、worker_cpu_affinityCPUMASK;通过worker与cpu绑定实现提升缓存的命中率,其中,用cpumask代表cpu的核心;(常用)
cpumask:
0000 0001第一个核心
0000 0010第二个核心
0000 0100第三个核心
0000 1000第四个核心
表示方法:worker_cpu_affinity 00000001 00000010 00000100;(含义:把worker进程版定在第一二三个核心上)
3、timer_resolution计时器解析度;降低此值,可减少gettimeofday()系统调用的次数;
4、worker_prioritynumber;指明worker进程的优先级(使用nice值,常用);
Nice值的优先级对应关系为-20对用100,19对应139,数值越小,优先级越高。
事件相关的配置:(event配置)
1、accept_mutex{off|on};     主进程调度用户请求至各worker进程时使用的负载均衡锁;on表示能让多个worker轮流地、序列化地去响应新请求;
2、lock_file FILE;     accept_mutex用到的锁文件路径;
3、use[epoll|rtsig|select|poll];指明使用的事件模型;建议让Nginx自行选择;
4、worker_connections#;设定单个worker进程所能够处理的最大并发连接数量;(常用)
用户于调试、定位问题:(若要使用debug级别,需要在编译nginx时使用--with-debug选项)
1、  daemon {on|off};是否以守护进程方式运行nginx;调试时应该设置为Off,也就是运行时在前台运行,所有日志等信息全部显示在前台,有助于调试;
2、  master_process {on|off};是否以master/worker模型来运行nginx; 调试时可以设置为off;

nginx作为web服务器时的配置
当作为类似于httpd服务提供静态页面访问服务只需要配置nginx.conf,其中与http相关的指令仅能够放置于http、server、location、upstream、if上下文中;
这里面server相当于httpd中的virtualhost,location相当于httpd中的documentroot
举例:创建一个主机名为www.iyunv.com,监听端口8080,网页文件位置在/vhost/web1/的虚拟主机,主页文件为index.html内容为we1
wKiom1WGTROBOkPnAAAkmygfHWE083.jpg
这样就定义好一个虚拟主机了,其中监听的端口也可换成listen IP:PORT的形式;
server_nameNAME [...];后可跟多个主机名,名称还可以使用正则表达式(~)或通配符,当定义多个虚拟主机时,先做精确匹配检查,然后做左侧通配符匹配检查,然后做右侧通配符匹配检查,然后做正则表达式匹配检查,最后做默认主机名检查,见下:
server {
         server_namewww.iyunv.com;
}
server {
         server_name*.iyunv.com;
}
server {
         server_namemail.*
}
server {
         server_name~^.*.iyunv.com$
location这里和httpd中的documentroot差不多,但是有一点不同的是,一个server中可以有几个不同的location,各个location定义的路径不同。当有客户端访问时,也会基于层层匹配机制做检查。例如:
server {
listen 80;
         server_namewww.iyunv.com;
         location/ {
         root"/vhosts/web1";
}
location/images/ {
         root"/vhosts/images";
}
location ~*.php$ {
fcgipass
}
}
上述三个location定义后,如访问http://www.iyunv.com/bbs/index.php,则会找最后一个先匹配,这里~*为正则表达式模块匹配检查,不区分字符大小写的意思,还有其他的几个,分别为:
=:精确匹配检查;
~: 正则表达式模式匹配检查,区分字符大小写;
~*: 正则表达式模块匹配检查,不区分字符大小写;
^~:URI的前半部分匹配,不支持正则表达式。
这里匹配的优先级为:精确匹配(=)、^~、~、~*、不带任何符号的location。
alias path路径映射,用于location配置段,定义路径别名,举例说明root和alias的区别:
root表示指明路径为对应的location "/" URL;alias表示路径映射;
location/images/ {
         root "/vhosts/web1";
         }
http://www.iyunv.com/images/a.jpg<-- /vhosts/web1/images/a.jpg
alias表明location指令后定义的URL是相对于alias所指明的路径而言;
location/images/ {
         alias "/www/pictures";
         }
http://www.iyunv.com/images/a.jpg<-- /www/picuter/a.jpg
默认主页面:
IndexFILE;
Index.html或index.php
wKioL1WGTtfwIa7LAAASMpkhjR8720.jpg
就是第三行中的这样
Error_page错误页面:根据http响应状态码来指明特用的错误页面;
wKiom1WGTTDCyNyrAAAckuWmRt8316.jpg
其中500,502,503,504代表错误码,/50x.html代表错误页,因为编译安装的时候,将错误页面直接放进了/usr/local/nginx/html/下,所以访问错误时,会自动调用该错误页面。
错误页面表示方法:error_page *** /ERRORPAGE_FILE或者error_page code=***/ERRORPAGE_FILE
举例:为8080端口的虚拟主机设置错误页面,此表示当输入8080端口后的无效页面时,nginx会自动调用/vhost/we1/目录下的404页面
wKiom1WGTUXh7zI7AAAtveFvJCM024.jpg
举例:当值访问页面错误码为200,则在访问时打开调试窗口看到的错误码就是200了
wKioL1WGTwmD0DSdAAAyJUQhipw206.jpg
基于IP的访问控制,可以放在server、location中达到基于IP的访问控制的功能
allowIP/Network;
denyIP/Network;
基于主机名的访问控制,举例说明:
先将auth_basic(认证时显示的内容)和auth_basic_user_file(认证所需的用户名密码文件)添加好
wKioL1WGTxXyCQD7AABSRkfzeW8523.jpg
建立/.passwd文件
使用htpasswd建立用户名和密码并重载服务即可
wKiom1WGTW7y-geZAABOV97NhsE937.jpg
这样在基于8080端口的虚拟主机就可以使用用户名密码访问了。

在nginx中实现https服务:在同一台主机上生成证书及签发证书
建立CA
wKioL1WGTy2hnP4dAAC7A7rLYBQ074.jpg
建立字签证书
wKiom1WGTYWCJEw_AAFLxw-Yqak380.jpg
切换到nginx目录中建立ssl目录,在其中创建秘钥
wKiom1WGTZrzzcDpAADvpAdp7q4124.jpg
建立证书签署请求
wKioL1WGT16gzzvKAAFZ4gPpP6g357.jpg
签署证书
wKioL1WGT27juJvdAAAj0pY-2XQ263.jpg
这样,在nginx实现https就完成了。

启用或关闭状态页:但仅能用于location上下文:
举例:建立允许172.16.0.0这个网络的主机可以访问的status页面
location/status {
stub_status on;
         allow 172.16.0.0/16;
         deny all;
}
这样就可以了。

网络相关配置
1、keepalive_timeout #;长连接的超时时长,默认75s;
2、keepalive_requests #;在一个长连接上所能够允许请求的最大资源数;
3、keepalive_disable[msie6|safari|none];为指定类型的User Agent禁用长连接;
4、tcp_nodelay on|off;是否对长连接使用TCP_NODELAY选项;
5、client_header_timeout #;读取http请求报文首部的超时时长;
6、client_body_timeout #;读取http请求报文body部分的超时时长;
7、send_timeout #;发送响应报文的超时时长;



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-79676-1-1.html 上篇帖子: Nginx+Keepalived实现负载均衡高可用 下篇帖子: Nginx源代码安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表