nginx基础应用

nginx简介

nginx是一款轻量级的web服务器和反向代理服务器,不同于传统的通过每进程或每线程处理并发连接请求的web服务器,nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制,通过单线程进程worker以高效的回环(run-loop)机制并行处理数千个并发连接请求。

nginx的工作模式:一个主进程(master)和多个工作进程(worker),master以root身份运行,worker以普通用户身份运行(nginx)。工作进程worker为单线程进程,进程与进程之间通过“共享内存”的机制实现通信。

nginx的代码由一个核心和一系列的模块组成。这一系列模块包括标准http模块,可选http模块,邮件模块及第三方扩展模块。在编译过程中核心模块和标准http模块,其余需要的模块需要手动指定。

安装nginx

1)添加nginx用户,工作进程以该用户的身份运行。

[[email protected] ~]# groupadd -r nginx
[[email protected] ~]# useradd -r -g nginx nginx

2)从官网http://nginx.org下载适合的包,根据自己需要的功能编译安装。

[[email protected] ~]# tar xf nginx-1.8.0.tar.gz
[[email protected] ~]# cd nginx-1.8.0
[[email protected] nginx-1.8.0]#   --prefix=/usr/local/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 >   --user=nginx >   --group=nginx >   --with-http_ssl_module >   --with-http_flv_module >   --with-http_stub_status_module >   --with-http_gzip_static_module >   --http-client-body-temp-path=/usr/local/nginx/client/ >   --http-proxy-temp-path=/usr/local/nginx/proxy/ >   --http-fastcgi-temp-path=/usr/local/nginx/fcgi/ >   --http-uwsgi-temp-path=/usr/local/nginx/uwsgi >   --http-scgi-temp-path=/usr/local/nginx/scgi >   --with-pcre
####################################
[[email protected] nginx-1.8.0]# make && make install

3)为nginx提供SysV init脚本(简单起见可以从epel源安装的nginx中获取)

[[email protected] nginx-1.8.0]# chmod +x /etc/rc.d/init.d/nginx
[[email protected] nginx-1.8.0]# chkconfig --add nginx

4)检查配置文件,启动服务。

[[email protected] ~]# nginx -t 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[[email protected] ~]# service nginx start

基本应用

虚拟主机

在server中定义虚拟服务器的相关属性,常见的指令有backlog、rcvbuf、bind及sndbuf等。不同于apache,nginx没有中心主机的概念,所有的服务都需要定义在虚拟主机中。

server {
   listen       80;
   server_name  www.xiaoxiao.com;
 
   location / {
       root   /www;
       index  index.html index.htm;
    }
}

访问控制,用户认证

访问控制功能由Access模块提供,allow和deny允许在http、server、location上下文中进行配置。在匹配过程中,由上而下进行匹配。如下示例,若需要对192.168.1.0这个网段中的192.168.1.1这台主机的访问进行限制,需要将deny 192.168.1.1写在allow 192.168.1.0/24之前,若写在后面,会先与allow 192.168.1.0/24进行匹配,匹配通过之后将直接允许访问。

location / {
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

用户认证功能由Auth Basic模块提供。对某些敏感目录需要限制用户的访问,示例如下:

   location /admin {
            root   /www;
            index  index.html index.htm;
            auth_basic "admin dir";
            auth_basic_user_file /etc/nginx/.htpasswd;
        }

auth_basic_user_file指定认证文件,通过htpasswd命令可生成该文件。

[[email protected] nginx]# htpasswd -m -c /etc/nginx/.htpasswd shaw    #生成认证问价,添加用户
[[email protected] nginx]# htpasswd -m /etc/nginx/.htpasswd Tom     #添加用户

autoindex模块

当访问的路径下没有默认页面时,可以通过添加autoindex on这一项,显示改路径下的所有文件。

location /download {
            root /www;
            index  index.html index.htm;
            autoindex on;
        }

压缩

将nginx响应给客户端的报文进行压缩,能够节约带宽并提高响应速度。要使用压缩功能,需要在编译安装时添加Gzip Precompression模块(--with-http_gzip_static_module)。

 server {
        listen       80;
        server_name  www.xiaoxiao.com *.xiaoxiao.com;
        gzip on;
        gzip_http_version 1.0;
        gzip_comp_level 6;
        gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
        gzip_disable msie6;
        }


防盗链

通过referer模块实现。通过请求的referer首部判断该请求来自哪个页面。若是其他网站的页面来引用本站点的资源则拒绝响应。

定义格式:valid_referers none | blocked | server_names | string ...;

none:请求报文的首部中没有“Referer”首部(在地址栏中直接输入资源地址)。

blocked:请求报文中有“Referer”首部,但其内容被防火墙或代理服务器清楚。

server_names:指定允许引用本站资源的主机名。

如下示例,仅允许.xiaoxiao.com这个域内的主机引用本站的图片资源。若是非法引用则直接转向错误页面。

location ~* \.(jpg|png|gif|jpeg)$ {
            root /www;
            rewrite ^/images/(.*)$ /img/$1 last;
            valid_referers none blocked www.xiaoxiao.com *.xiaoxiao.com;
            if  ($invalid_referer) {
                        rewrite ^/.*$ http://www.xiaoxiao.com/404.html;
                }
        }

Rewrite

Rewrite为地址重写模块,示例如下:

	        location / {
	        		root /www;
	        		rewrite ^/images/(.*)$ /imgs/$1 last; 
	        	}

对被该location匹配到的uri进行重写。如:

http://www.xiaoxiao.com/images/a.jpg --> http://www.xiaoxiao.com/imgs/a.jpg

最后面的last为flags(标签)。常用的flags有:

last                #一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后通过重

#写后的规则重新发起请求;

break             #一旦被当前规则匹配并重写后立即停止后续的其它rewrite的规则,而后继续由

#nginx进行后续操作;

redirect         #返回302临时重定向;

permanent    #返回301永久重定向;

相关的参数:

rewrite_log on|off    #是否把重写过程记录在错误日志中(默认为off),默认为notice级别。

return code              #用于结束rewrite规则,并且为客户返回状态码;可以使用的状态码有204,

#400, 402-406, 500-504等;


nginx限速配置

limit Request限制客户端的访问速度。实现针对每个IP定义一个存储session状态的容器,根据状态信息对客户端的访问作出限制。

语法:limit_req_zone $session_variable zone=name_of_zone:size rate=rate

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    ...
    server {
        ...
        location /search/ {
            limit_req zone=one burst=5;
        }

如上示例中,one为区域名称,以便在下面的limit_req中引用,10M为该区域所占内存大小,rate指定访问速度(每秒最多一个请求)。

Limit Conn用于限制客户端的并发连接数。配置与上述类似。

limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
    ...
    limit_conn perip 10;
    limit_conn perserver 100;
}

limit_conn perip 10表示对应的容器中的ip在同一时间最多仅允许10个并发请求。

反向代理,负载均衡

Nginx通过proxy模块实现反向代理功能。在作为web反向代理服务器时,nginx负责接收客户端请求,并能够根据URI、客户端参数或其它的处理逻辑将用户请求调度至上游服务器上(upstream server)。nginx在实现反向代理功能时的最重要指令为proxy_pass,它能够将location定义的某URI代理至指定的上游服务器(组)上。

配置格式如下:

location /uri {
		proxy_pass http://www.magedu.com:8080/newuri;
	}

通过upstream模块可定义一个上游服务器组,在反向代理时,将请求代理至这个服务器组,实现负载均衡。upstream模块的负载均衡算法主要有三种,轮调(round-robin)、ip哈希(ip_hash)和最少连接(least_conn)三种。

http {
    upstream dynamic {
       least_conn;
       server node1.xiaoxiao.com max_fails=3 fail_timeout=30s;
       server node2.xiaoxiao.com max_fails=3 fail_timeout=30s;
       }
     server {
       location / {
            index  index.html index.htm;
            proxy_pass http://dynamic;
            proxy_set_header       Host $host;
        }
     }
 }

在负载均衡过程中nginx会自动检测上游服务器的健康状况。若上游的某台服务器down了或者服务停止了,nginx会自动识别,不再将请求调度至该服务器。故障服务器重新上线后,也能够马上加入到组中,恢复正常工作。

缓存

nginx作为反向代理服务器时,可以将上游服务器的响应数据暂存在本地,以加快响应客户端的速度。

proxy_cache zone|off:定义一个用于缓存的共享内存区域,其可被多个地方调用;缓存将遵从upstream服务器的响应报文首部中关于缓存的设定,如 "Expires"、"Cache-Control: no-cache"、 "Cache-Control: max-age=XXX"、"private"和"no-store" 等。

在响应报文中含有以下首部或指定标志的报文将不会被缓存。

1)Set-Cookie

2)Cache-Control containing "no-cache", "no-store", "private", or a "max-age" with a non-numeric or 0 value

3)Expires with a time in the past

4)X-Accel-Expires: 0

proxy_cache_path:定义一个用于保存缓存响应报文的目录,及一个保存缓存对象的键及响应元数据的共享内存区域(keys_zone=name:size),其可选参数有:

levels         #每级子目录名称的长度,有效值为1或2,每级之间使用冒号分隔,最多为3级;

inactive     #非活动缓存项从缓存中剔除之前的最大缓存时长;

max_size   #缓存空间大小的上限,当需要缓存的对象超出此空间限定时,缓存管理器将基于LRU算

#法对其进行清理;

proxy_cache_use_stale:在无法联系到upstream服务器时的情形下(如error、timeout或http_500等)让nginx使用本地缓存的过期的缓存对象直接响应客户端请求。如下:

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off

proxy_cache_valid [ code ...] time:用于为不同的响应设定不同时长的有效缓存时长。

例如:proxy_cache_valid  200 302  10m;

使用示例:

http {
    proxy_cache_path  /data/nginx/cache  levels=1:2    keys_zone=STATIC:10m
                                         inactive=24h  max_size=1g;
    server {
        location / {
            index  index.html index.htm;
            proxy_pass http://dynamic;
            proxy_set_header       Host $host;
            proxy_cache            STATIC;
            proxy_cache_valid      200  1h;
            proxy_cache_valid     301 302 1m;
            proxy_cache_valid     any 1m;
            proxy_cache_use_stale  error timeout invalid_header updating
                                 http_500 http_502 http_503 http_504;
        }
    }
}

以上仅是nginx的基础应用,若需要关于各模块更详细的说明,可参考官方文档http://wiki.nginx.org/Modules。.................^_^

时间: 2024-08-30 12:51:27

nginx基础应用的相关文章

Nginx基础笔记

Nginx基础笔记 资源 安装 ubuntu下 编译安装 基本操作 HTTP基本配置 配置说明 配置文件目录结构 配置文件结构 模块 模块化 index模块 Log模块 Real IP模块 Access模块 Rewrite模块 Proxy模块 upstream模块 其他 配置静态化目录 负载均衡 控制页面缓存 nginx的内置变量 nginx小结 资源 资源 Nginx 官网 Nginx 官方下载地址 Nginx最佳实践配置项目 地址 Nginx Configuration wiki 教程 ag

【Nginx】Nginx基础架构

一.Nginx的架构设计 1)优秀的模块化设计 2)事件驱动架构 事件驱动架构是指由一些事件发生源来产生事件,由一个或多个事件收集器来收集.分发事件,然后许多事件处理器会注册自己感兴趣的事件,同时会消费这些事件. 对于Nginx而言,一般会由网卡.磁盘产生事件,事件模块将负责事件的收集.分发操作,而所有的模块都可能是事件消费者. Nginx采用完全的事件驱动架构来处理业务.对于传统web服务器而言,事件驱动往往局限在TCP链接建立.关闭事件上,一个连接建立以后,在其关闭之前的所有操作逗不再是事件

nginx基础及其相关配置

nginx基础 Nginx的基本架构 一个master主进程,生成一个或多个worker子进程 事件驱动 epoll(边缘触发),用于Linux kqueue:用于BSD /dev/poll: IO复用器:select.poll.rt signal 支持sendfile及sendfile64 支持AIO 支持mmap 名词解释: sendfile机制:正常响应报文路径"内核空间-->用户空间-->内核空间-->客户端",如果报文在用户空间不做任何改变时,路径不再经由用

手把手教你nginx基础安装配置

手把手教你nginx基础安装配置! 一.Nginx安装及简单配置: 安装环境和依赖的包: #yum groupinstall "developmenttools" "server platform development" # yum -yinstall pcre-devel #yum install openssl-devel 下载相关nginx源码包: #wgethttp://nginx.org/download/nginx-1.6.2.tar.gz 解压缩源码

Nginx基础教程PPT

Nginx基础教程PPT By 马冬亮(凝霜  Loki) 一个人的战争(http://blog.csdn.net/MDL13412) pdf版本下载 Nginx基础教程PPT

NGINX基础(一)

NGINX基础 ============================================================================ 概述: Nginx介绍 ★engineX = Nginx NGINX is a free, open-source,high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxyserver. (NGINX是一个免费.开源.高性能的HTT

nginx基础知识

参考博客: http://www.2cto.com/os/201212/176520.html http://os.51cto.com/art/201111/304611.htm http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html Nginx.conf学习 #定义Nginx运行的用户和用户组 user www www: #nginx进程数,建议设置为等于CPU总核心数 worker_processes 8; #

Nginx基础整理

目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Nginx的主要企业功能 Nginx作为web服务器的主要应用场景包括: Nginx的安装 安装环境 快速安装命令集合 各个命令解释 脚本 注意 安装故障总结 故障一:没有安装pcre或pcre-devel 故障二:没有安装openssl和openssl-devel 常用的Nginx http功能模块 Nginx的目录结构 Nginx最重要的配置文件nginx.conf详解 生产中常见的网站状态码 Nginx基础知识:

[Nginx] – 基础安全优化 【一】

Nginx基础安全1,Nginx版本号信息隐藏所有软件都在更新迭代,但是线上环境最主要的还是稳定,所以我们不会盲目最新,更愿意选择一个持续维护的稳定版,但没个版本都会有漏洞,如果不更新软件,又让黑客知道了我们使用的版本,就等于把我们的漏洞,都告诉给他们了,这样非常危险.故此,要修改Nginx的版本信息,或隐藏,给敌人一种假象: [[email protected] ~]# vim /application/nginx/conf/nginx.conf http{ server_tokens off

nginx基础http协议

Nginx基础Http Http协议介绍 http全称HyperText Transfer Protocol中文名为超文本传输协议 1.什么是超文本? 包含有超链接(Link)和各种多媒体元素标记的文本.这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page).这些链接使用URL表示.最常见的超文本格式是超文本标记语言HTML. 2.什么是URL 3.什么是超文本传输协议HTTP? 是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应