nginx特性及基本配置

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的基本架构特性:看图自己理解

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.tony.com,监听端口8080,网页文件位置在/vhost/web1/的虚拟主机,主页文件为index.html内容为we1

这样就定义好一个虚拟主机了,其中监听的端口也可换成listen IP:PORT的形式;

server_nameNAME [...];后可跟多个主机名,名称还可以使用正则表达式(~)或通配符,当定义多个虚拟主机时,先做精确匹配检查,然后做左侧通配符匹配检查,然后做右侧通配符匹配检查,然后做正则表达式匹配检查,最后做默认主机名检查,见下:

server {

server_namewww.tony.com;

}

server {

server_name*.tony.com;

}

server {

server_namemail.*

}

server {

server_name~^.*\.tony\.com$

location这里和httpd中的documentroot差不多,但是有一点不同的是,一个server中可以有几个不同的location,各个location定义的路径不同。当有客户端访问时,也会基于层层匹配机制做检查。例如:

server {

listen 80;

server_namewww.tony.com;

location/ {

root"/vhosts/web1";

}

location/images/ {

root"/vhosts/images";

}

location ~*\.php$ {

fcgipass

}

}

上述三个location定义后,如访问http://www.tony.com/bbs/index.php,则会找最后一个先匹配,这里~*为正则表达式模块匹配检查,不区分字符大小写的意思,还有其他的几个,分别为:

=:精确匹配检查;

~: 正则表达式模式匹配检查,区分字符大小写;

~*: 正则表达式模块匹配检查,不区分字符大小写;

^~:URI的前半部分匹配,不支持正则表达式。

这里匹配的优先级为:精确匹配(=)、^~、~、~*、不带任何符号的location。

alias path路径映射,用于location配置段,定义路径别名,举例说明root和alias的区别:

root表示指明路径为对应的location "/" URL;alias表示路径映射;

location/images/ {

root "/vhosts/web1";

}

http://www.tony.com/images/a.jpg<-- /vhosts/web1/images/a.jpg

alias表明location指令后定义的URL是相对于alias所指明的路径而言;

location/images/ {

alias "/www/pictures";

}

http://www.tony.com/images/a.jpg<-- /www/picuter/a.jpg

默认主页面:

IndexFILE;

Index.html或index.php

就是第三行中的这样

Error_page错误页面:根据http响应状态码来指明特用的错误页面;

其中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页面

举例:当值访问页面错误码为200,则在访问时打开调试窗口看到的错误码就是200了

基于IP的访问控制,可以放在server、location中达到基于IP的访问控制的功能

allowIP/Network;

denyIP/Network;

基于主机名的访问控制,举例说明:

先将auth_basic(认证时显示的内容)和auth_basic_user_file(认证所需的用户名密码文件)添加好

建立/.passwd文件

使用htpasswd建立用户名和密码并重载服务即可

这样在基于8080端口的虚拟主机就可以使用用户名密码访问了。

在nginx中实现https服务:在同一台主机上生成证书及签发证书

建立CA

建立字签证书

切换到nginx目录中建立ssl目录,在其中创建秘钥

建立证书签署请求

签署证书

这样,在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 #;发送响应报文的超时时长;

时间: 2024-10-25 03:30:26

nginx特性及基本配置的相关文章

Nginx简介与基础配置

何为Nginx? Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.最初是为了解决C10k的问题,由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日. 其特性有: √模块化设计,较好的扩展性 Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux.FreeBSD.Solaris.Mac OS X.AIX以及M

nginx详解及配置

Nginx特性:     模块化设计.较好的扩展性:       高可靠       master --> worker       低内存消耗       10000个keep-alive模式下的connection,仅需要2.5MB的内存:       支持热部署       不停机而更新配置文件.日志文件滚动.升级程序版本: 支持事件驱动.AIO.mmap: 基本功能:      静态资源的web服务器,能缓存打开的文件描述符:       http.smtp.pop3协议的反向代理服务器

Nginx服务器性能优化配置

在大多数情况下,一个常规安装的nginx服务器对你的网站来已经是能很好地工作的了.然而,如果你真的想挤压出nginx的性能,你必须更深入 一些.在这时我们将解释Nginx的那些设置可以微调,以优化在处理大量客户端请求时的性能.需要注意一点的是这不是一个全面的微调指南,而是一个简单的 可以通过微调来提高性能设置的概述.请根据实际情况使用. 基本的 (优化过的)配置 我们这里要修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.通常情况下你能够在服务器的/etc/nginx目

nginx 服务器下载安装配置详解

近段时间用了nginx服务  作为总结写一篇博客 与大家分享:时间关系没有说的太过于详细甚至言语有些凌乱望见谅,有不足之处请斧正. 有这几个问题 与大家探讨一下 1 nginx是个什么东东?2为什吗要用nginx 3 如何用? 首先nginx和apache一样是一个web服务器.apache大家都知道 年代久远 世界第一大服务器.它是一个重量级服务器,不支持高迸发.运行数以万计的迸发访问,会导致apache消耗大量的内存,导致http请求响应效率降低,影响用户的体验. nginx的出现就是为了应

Nginx反向代理的配置

Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之支持PHP 5. 以源码编译的方式安装PHP与php-fpm 6. Nginx多站点配置的一次实践 7. Nginx反向代理的配置 Nginx 作为 web 服务器一个重要的功能就是反向代理.其实我们在前面的一篇文章<Nginx多站点配置的一次实践>里,用的就是 Nginx 的反向代理,这里简单再

nginx+lua+redis(openresty)配置

nginx+lua+redis(openresty)配置 2014-07-18 11:10 2494人阅读 评论(1) 收藏 举报 方案一: 1.安装lua解释器 wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz (http://luajit.org/download.html) 配置lua Lib和include/luajit-$version目录为环境变量 2.下载ngx_devel_kit和lua-nginx-module https:

Nginx+PHP7 安装及配置

今天花了几个小时折腾了下Nginx+PHP7编译安装和配置,写个博文记录下. 系统环境:centos6.5 x64 软件版本:nginx-1.10.0 php-7.0.6 安装 Nginx Nginx官网:http://nginx.org/ 先安装编译依赖的一些组件 yum install pcre pcre-devel openssl openssl-devel -y 1.解压程序包 tar xf nginx-1.10.0.tar.gz  cd nginx-1.10.0 2.预编译配置参数 .

nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云主机), 如何隔离访问这些服务资源? 彼此又不影响呢? nginx来为你排忧解难, ^_^. 本文将介绍tomcat的简单配置和部署, 以及nginx作为反向代理, 如何分流. 基础架构: 不成文的约定: 1). 一个tomcat容器部署一个webapp应用实例 2). url根目录访问webapp

Ubuntu中Nginx的安装与配置

Ubuntu中Nginx的安装与配置 1.Nginx介绍 Nginx是一个非常轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和 反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器. 2.对PHP支持 目前各种web 服务器对PHP的支持一共有三种: (1)通过web 服务器内置的模块来实现,例如Apache的mod_php5,类似的Apache内置的mod_perl 可以对perl支持. (2)通过CGI来实现,这个就好比之前per