简述Nginx及Nginx搭建

简单罗列基础命令,只分享我的想法!

一、Nginx简介

Nginx("engine x") 是一个高性能的 HTTP和“反向代理”服务器,也是一个 IMAP/POP3/SMTP 的代理服务器。是logor Sysoev这个俄罗斯人开发的,lgor将源代码以类BSD许可证的形式发布,所以是开源软件,Nginx因为它的稳定性、丰富的功能集和低系统资源消耗而闻名,国内的sina和酷六等网站均部署了Nginx。

二、和httpd的相对说明

Apache的httpd-2.4版本才正式支持event模型,有别于httpd-2.2版本httpd-2.4版本提供了FastCGI模块,实现以FastCGI模块连接PHP,并且httpd-2.4的新特性刚刚支持异步I/O,而上述httpd的特性在Nginx的设计之初已经被考虑和解决,所以,Nginx也解决了C10K的问题,所以Nginx很流行,但是httpd的特性,Nginx也不是全部支持,Nginx的配置很“随意”也很灵活,但是httpd和Nginx真是各有千秋。

三、Nginx深入说明

(1)、Nginx是模块化设计,有较好的扩展性。

Nginx的模块化设计有别于httpd的DSO,httpd的DSO(动态共享模块)可以在使用该模块功能的时候在/etc/httpd/conf/httpd.conf中临时装卸载,而Nginx是把模块编译进来,随着Nginx的启动而启动,不能实现动态的装卸载。

(2)、更高的可靠性和更低的内存消耗

Nginx是有一个主控进行产生多个子进程,每个子进程可以响应N个用户请求的Event事件驱动模型。一个子进程响应10000个并发也许只占用2.5MB左右的内存。

因为Nginx是根据调用epoll()这个基于SignalDriven I/O(事件驱动式I/O)所开发的Event事件模型。

事件驱动式I/O,主要原理是在“硬盘数据加载到内核内存空间”阶段,调用程序是非阻塞状态,也就是说,每一个用户请求的数据,Nginx的子进程(worker)都会丢给kernel,kernel马上响应worker,但不是最终的结果,当kernel需要把kernel内存中的worker需要的数据拷贝到worker的内存空间时,kernel会通过状态、某种通信机制或回调函数告知worker准备好,我要把数据拷给你,从内核内存复制数据到worker的内存中,worker只能被阻塞,这就是Event模型,这也就是为什么可以同一个进程相应多个用户请求的原因。

当然了,现在的httpd-2.4版本和Nginx都支持异步模型,响应速度较Event模型也有很大的提高,因为从内核内存复制到worker内存的时候,worker也不会被挂起(也就是阻塞),等到全部数据已经拷贝到worker的内存时,通知worker直接打包封装发送给用户。

(3)、支持热部署:可以不停机更新配置文件、日志文件滚动、甚至升级程序版本。

最明显的体验是,当你配置Nginx要发布一个server的时候,只需reload即可,而不用像在httpd那样需要重新启动httpd进程。

(4)、充当静态资源WEB服务器的时候,能够缓存打开文件的描述符。

这个特性可以提高用户的响应速率,相当于拥有更多的缓存。

(5)、充当HTTP、POP3和SMTP的反向代理服务器。

反向代理服务器就是可以接收用户的请求,然后二次打包发给后面的其它服务器,这样的好处是可以把后面的服务器进行隔离,因为能够缓存打开文件的描述符,所以,也可以提高速度。

(6)、负载均衡

因为Nginx可以支持更多的并发请求,所以可以把这些请求按照某种算法分配到后面的不能接受大量并发请求的如PHP等服务器上面,这样可以更好的响应用户的请求。

(7)、支持FastCGI模块

(8)、支持SSL

以上是Nginx的主要的特性或功能,其实Nginx非常的灵活,所以,更多的时候需要你去官网查看某些配置命令的使用说明,官网的地址是:http://nginx.org/en/docs/

四、编译安装Nginx

(1)、其实在编译的时候最主要的是要把需要的模块编译进来,其它诸如worker进程的属主和属组,log文件的位置都可以在编译之后的配置文件中再定义,以下是较详细的编译,在编译前安装pcre-devel这个子包,用于支持url重写时候的正则表达式。

yum install pcre-devel –y

(2)、创建worker的属主和属组。

usr –r nginx

(3)、解压缩安装包,并编译

//--http-client-body-temp-path 用户上传的数据临时存放的目录
//--http-proxy-temp-path 作为代理服务器的时候,也需要从服务器取得内容,然后存放到本地的临时目录
//--http-uwsgi-temp-path 都是反向代理的缓存
//--http-fastcgi-temp-path  都是反向代理的缓存
//--with-http_stub_status_module 状态页面,相当于server-status
./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--lock-path=/var/lock/nginx.lock --with-http_ssl_module--with-http_stub_status_module --with-http_gzip_static_module--with-http_flv_module --with-http_mp4_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/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi

(4)、编译和安装。

make && make install

(5)、创建相应的目录,否则Nginx不能启动。

mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi,uwsgi}

五、/etc/nginx/nginx.conf配置文件说明。

对配置文件的一些主要的配置命令做说明。

(1)、worker_rlimit_nofile #;主要是放在main上下文中,设定所有worker进程所能打开的句柄数,因为每个并发请求都是基于socket,linux一切皆文件,所以每个连接都会有一个socket文件,而linux限制是每个用户(Nginx)打开1024个文件,所以这里需要修改。

(2)、worker_processes #;worker进程的个数,需要小于cpu的核心数(默认是1)。

(3)、worker_cpu_affinity CPUMASK…; 主要是放在main上下文中,意义是把worker进程绑定到一个或多个cpu上面,以提高cpu二级cache的缓存命中率,阻止其它硬件或软件中断,以及减少一小部分CS(进程间切换)。

(4)、timer_resolution #;主要是放在main上下文中,应把#(100ms官方给的example)尽量的调小,让其尽量少的调用gettimeofday()函数获取时间。

(5)、worker_priority #;主要是放在main上下文中,可以设置为负数,因为主进程是以root的身份启动的,#数值越小,越优先(默认是0)。

(6)、accept_mutex on|off;主要是放在events上下文中,如果是on(默认)表示能让多个worker轮流地、序列化地去响应新的请求,而off是随机的选取worker相应。

(7)、worker_connections #;主要是放在events上下文中,一个worker进程所处理的最大并发连接数。

(8)、daemon on|off;主要是放在main上下文中,如果在编译的时候添加—with-debug,才能编辑此命令,是否以守护进程的模式来运行Nginx,一般在调试的时候选择off(on默认),能够查看问题。

(9)、master_process on|off;主要是放在events上下文中,是否以master/worker模型来运行Nginx,调试的时候关闭(默认是on)。

注意:以上所用到的均是Nginx的core module,在官方网站中均可以查看。网站地址如下:http://nginx.org/en/docs/ngx_core_module.html

六、WEB服务配置框架说明。

配置WEB服务器在配置命令中的大致框架为:

http {
upstream {  //主要是需要配置负载均衡的时候使用
 …
         }
 server {
 location URL {
 …
}
  If (CONDITION) {
   …
               }
           }//类似httpd中的<Location>定义URL的。

七、WEB服务配置选项主要说明。

定义一个WEB虚拟机

server {
        listen 8080;
        server_name www.wlw.com;
        location / {
        root"/vhost/web/";
        #auth_basic " renzheng ";
        #auth_basic_user_file/etc/nginx/renzheng/.htpasswd;
error_page 404 /404_customed.html;
                rewrite^/.*\.text$ /index.html break;
        }
        location /host/ {
        alias /hosts/;
        }
        location /err/ {
                root "/vhosts/web/";
                }
        }

想通过此虚拟机说明以下几个问题。

(1)、root PATH;其实你可以把它理解为对/目录的一个alias,也就是说上文的第三个location,如果你去访问www.wlw.com:8080/err/其实相当于访问www.wlw.com:8080/vhosts/web/err/

(2)、server_name NAME;如果有多个虚拟机,是这样查找FQDN的。

  • 先做精确匹配检查;
  • 左侧通配符匹配检查:*.magedu.com
  • 右侧通配符匹配检查:如mail.*
  • 正则表达式匹配检查:如~^.*\.magedu\.com$
  • default_server;

(3)、基于IP的访问控制。

在location或server中,通过以下命令实现。

allow IP/MASK|all
deny IP/MASK|all

(4)、基于用户的访问控制

#auth_basic " ren zheng ";
#auth_basic_user_file /etc/nginx/renzheng/.htpasswd;

这个在事例中已经演示(测试的时候麻烦,禁用了),其实和httpd差不多,只不过httpd的AuthType basic省略,而AuthName被auth_basic替换,AuthUserFile被auth_basic_user_file取代,同样是通过htpasswd这个命令生成密码。

(5)、命令别名

上述的示例中已经明确了命令别名的用法,和httpd中的配置一样。

(6)、location的用法如下:

location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

功能:允许根据用户请求的URI来匹配定义各location;匹配到时,此请求将被相应的location配置块中的配置所处理,例如做访问控制等功能;

=:精确匹配检查;

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

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

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

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

注意:用到了正则表达式都会消耗一定的cpu周期。

(7)、URL rewrite

rewrite regex replacement flag;

flag:

last:一旦此rewrite规则重写完成后,就不再被后面其它的rewrite规则进行处理;而是由User Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程。

break:一旦此rewrite规则重写完成后,由User Agent对新的URL重新发起请求,且不再会被当前location内的任何rewrite规则所检查。

redirect:以302响应码(临时重定向)返回新的URL。

permanent:以301响应码(永久重定向)返回新的URL。

注意:事例使用的flag为break,把所有以.text结尾的请求重写到index.html,如下图所示。

图1

把以上事例的flag修改成永久重定向permanent,显示如下图2。

图2

注意:同样的请求,一个重写一个永久重定向,图1仍然是www.wlw.com:8080/xxx.text,而永久重定向就是www.wlw.com:8080/index.html

(8)、根据httpd的响应状态码来指明特定的错误页面

error_page code ... [=[response]] uri;定义在location或者server中都可以但是必须是/下,根据上面的事例,进行测试,截图如下。

图3

(9)、https服务

和httpd的配置一样,只要在/etc/nginx/nginx.conf中修改以下配置即可。

# HTTPS server
    #
    #server {
    #    listen      443 ssl;
    #    server_name localhost;
 
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
 
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
 
    #    ssl_ciphers HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
 
    #    location / {
    #        root  html;
    #        index index.html index.htm;
    #    }
    #}
 
}

(10)、显示类似server-status的页面。

location /server-status {
                stub_statuson;
                allow172.16.29.1;
                }

显示截图如下。

图4

代表的意义:仅有一个客户端连接进来(我用的是我的物理机打开),已经接受的连接数31次,已经处理过的连接数也是31次,已经处理了66次请求。正处于请求状态的连接数是0,请求已经接收完成,正处于处理请求或者发送响应过程的连接数是1,保持连接模式且处于活动状态的连接数是0。

(11)、防盗链

location ~* \.(jpg|gif|jpeg|png)$ {
                                    valid_referernone blocked www.wlw.com;
                                     if($invalid_referer) {
                                rewrite^/ http://www.wlw/403.html;
                                                        }
                                               }

(12)、keepalive_timeout #;

在http,server及location的上下文中配置,长连接的超时时长,默认75s;

(13)、keepalive_requests #;

在http,server及location的上下文中配置,在一个长连接上所能够允许请求的最大资源数,默认是100个请求

(14)、keepalive_disable [msie6|safari|none];

为指定类型的UserAgent(浏览器)禁用长连接;

(15)、tcp_nodelay on|off;

意义是合并多个小的请求,然后统一在发送,如果要提高用户的体验,这项必须on。

(16)、client_header_timeout #;

读取http请求报文首部的超时时长。

(17)、client_body_timeout #;

读取http请求报文body部分的超时时长。

(18)、send_timeout #;

发送响应报文的超时时长。

注意:以上所有的配置命令,都是根据Standard HTTP Modules和Optinos HTTP Modules,这连个模块集的说明来定义的,网址http://wiki.nginx.org/Modules,可以在配置的时候查看。

(19)、if

语法:if(condition) {...}

应用环境:server,location

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;
                                               }

以上是对Nginx的简单认识。

时间: 2024-10-23 14:51:39

简述Nginx及Nginx搭建的相关文章

Nginx网站服务器搭建实例

Nginx是一款开源的高性能HTTP服务器和返向代理服务器. 下载.编译.安装模块: [[email protected] nginx-1.4.0]#wget http://nginx.org/download/nginx-1.4.0.tar.gz [[email protected] nginx-1.4.0]#tar -xzf nginx-1.4.0.tar.gz -C /usr/src/ [[email protected] nginx-1.4.0]#yum -y install gcc p

windows 下nginx 虚拟主机搭建

需要在 nginx.conf里面引入刚才配置的那个文件 第一步 加东西 http的节点里面加上 一定要注意的是:必须以  ;  结尾 include D:/phpen/nginx-1.3.6/conf/vhost/www.light.com.conf; 或者 include D:/phpen/nginx-1.3.6/conf/vhost/*.conf; 第二步  写配置文件 下面的 这两种方法我都测试过的哦 可以为每一个单独创建一个文件      这个是便于管理 也可以把所有的都写入同一个文件

【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepalived实现的HA(High Available).为什么要实现高可用呢?曾经在搭建的时候仅仅用了一台Nginxserver,这种话假设Nginxserver宕机了,那么整个站点就会挂掉.所以要实现Nginx的高可用,一台挂掉还会有还有一台顶上去.从而保证站点能够持续的提供服务. 关于负载均衡和动静

windows下 nginx php 环境搭建

windows下配置nginx+php环境 刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是“引擎x”,一般引“擎代”表了性能,而“x”大多出现是表示“xtras(额外的效果)”,那么整个词的意思就是类似“极致效果”,“额外性能”.当然这里不是要来唠嗑,以上是题外话. nginx相较于我们熟悉的apache.IIS的优势,就我浅入浅出的了解,在于“反向代理”和“负载均衡”.因此考虑到能够为Web服务器节省资源,它可以代替apache来提供Web服务.那么上正题了,ngin

nginx 视频服务器搭建

1,准备编译环境 # apt-get install build-essential 下载所需安装包, openssl-1.0.1g.tar.gz pcre-8.35.tar.gz zlib-1.2.8.tar.gz nginx_mod_h264_streaming-2.2.7.tar.gz nginx-1.6.0.tar.gz 2,安装openssl # tar xvzf openssl-1.0.1g.tar.gz # cd openssl-1.0.1g/ # ./config –prefix

170116、centos6.4下nginx和ftp搭建图片服务器

一.需要的组件 图片服务器两个服务: Nginx(图片访问): 1.http服务:可以使用nginx做静态资源服务器.也可以使用apache.推荐使用nginx,效率更高. 2.反向代理 实现 负载均衡 ftp服务(图片上传): 使用Linux做服务器,在linux中有个ftp组件vsftpd. 二.Nginx服务器搭建 1.安装Nginx 要求安装vmware虚拟机. Linux:CentOS6.4(32) Nginx:1.8.0 Vsftpd:需要在线安装. 虚拟机以及Linux安装很简单此

Django部署:Django+gunicorn+Nginx环境的搭建

本人的服务器环境为Ubuntu14.04,使用的是Python3.4版本,并且安装有pip(Ubuntu中Python3配合的是pip3),并且以管理员身份运行,如果是普通用户,请切换管理员权限(sudo). 一.gunicorn和nginx的简介 gunicorn需要搭配nginx使用,那么两者的作用到底是什么. 1.gunicorn简介:gunicorn是一个Python WSGI UNIX服务器.WSGI(Web Server Gateway Interface)是Web服务网关接口,位于

使用Nginx负载均衡搭建高性能.NETweb应用程序二

在文章<使用Nginx负载均衡搭建高性能.NETweb应用程序一>中,让我们对Nginx有了一个初步认识,下面我们将在windows平台下面使用Nginx演示集群部署我们的web应用. 一.下载Nginx部署包 到Nginx官网去下载一个windows平台下面的Nginx部署包,目前我下载的是一个nginx-1.6.2版本的. 二.命令启动服务 启动:start nginx.exe 停止:nginx -s stop 重新加载: nginx -s reload 三.实例搭建 首 选:我们要在我们

linux 负载均衡配置 keepalive lvs 使用nginx转发 CentOS7 搭建LVS+keepalived负载均衡

最近希望能够配置一下负载均衡,在虚拟机上面,但是网上找了很多资料很零散,对于不了解的人,很多不够详细,最近终于做好了,把具体的步骤写下来,方便各位网友查阅学习 这个实验需要安装nginx如果没有安装过,请参考: linux安装nginx:http://www.cnblogs.com/aspirant/p/6714548.html (1) 我们的系统是CentOS7 目前需要四台机器,分别为 Director机器 两台:master,slave 真实机器realserver1,realserver