Nginx的基本配置

来源:互联网 发布:coupang java招聘 编辑:程序博客网 时间:2024/06/03 07:24

Nginx的基本配置-1

  1. 默认启动Nginx时,使用的配置文件是: 安装路径/conf/nginx.conf 文件
    可以在启动nginx的时候,通过-c来指定要读取的配置文件
  2. n 常见的配置文件有如下几个: nginx.conf:应用程序的基本配置文件 mime.types:MIME类型关联的扩展文件
    fastcgi.conf:与fastcgi相关的配置 proxy.conf:与proxy相关的配置
    sites.conf:配置Nginx提供的网站,包括虚拟主机
  3. n Nginx的进程结构 启动Nginx的时候,会启动一个Master进程,这个进程不处理任何客户端的
    请求,主要用来产生worker进程,一个worker进程用来处理一个request。
  4. n Nginx模块分为:核心模块、事件模块、标准Http模块、可选Http模块、邮件模 块、第三方模块和补丁等

Nginx的基本配置-2

  1. Nginx基本模块:所谓基本模块,指的是Nginx默认的功能模块,它们提供的指
    令,允许你使用定义Nginx基本功能的变量,在编译的时候不能被禁用,包括: 核心模块:基本功能和指令,如进程管理和安全
    事件模块:在Nginx内配置网络使用的能力 配置模块:提供包含机制
  2. n 常见的核心模块指令,大部分都是放置在配置文件的顶部 具体的指令,请参看nginx的官方文档,非常详细,参见:
    http://nginx.org/en/docs/ngx_core_module.html
  3. n 常见的events模块指令,大部分都是放置在配置文件的顶部
    具体的指令,在上面那个文档里面,命令的context为events的就是events 模块指令,只能在events里面使用

Nginx常用的核心模块指令

  1. 核心模块指令,重点看看:error_log、include、pid、user、worker_cpu_affinity、
    worker_processes
  2. error_log 日志有6个级别:debug|info|notice|warn|error|crit
    Nginx支持将不同的虚拟主机的日志记录在不同的地方,如下示例:
http{error_log logs/http_error.log error;server{server_name one;access_log logs/one_access.log;error_log logs/one_error.log error;}server{server_name two;access_log logs/two_access.log;error_log logs/two_error.log error;}}

]
注意:error_log off不是禁用日志,而是创建一个名为off的日志,要禁用日志,可以这么写:error_log
/dev/null crit;

Nginx的HTTP基本配置

Nginx的HTTP配置主要包括三个区块,结构如下:

http { //这个是协议级别    include mime.types;    default_type application/octet-stream;    keepalive_timeout 65;    gzip on;    server { //这个是服务器级别    listen 80;    server_name localhost;        location / { //这个是请求级别        root html;        index index.html index.htm;        }    }}

Nginx的HTTP核心模块,包括大量的指令和变量,大都很重要,具体参见:
http://nginx.org/en/docs/http/ngx_http_core_module.html

Location区段-1

  1. Location区段,通过指定模式来与客户端请求的URI相匹配,基本语法如下: location [=|~|~*|^~|@]
    pattern{……}
1:没有修饰符表示:必须以指定模式开始,如:server {    server_name sishuok.com;    location /abc {    ……    }}那么,如下是对的:http://sishuok.com/abchttp://sishuok.com/abc?p1=11&p2=22http://sishuok.com/abc/http://sishuok.com/abcde

Location区段-2

2:= 表示:必须与指定的模式精确匹配,如:    server {    server_name sishuok.com;    location = /abc {    ……    }}那么,如下是对的:http://sishuok.com/abchttp://sishuok.com/abc?p1=11&p2=22如下是错的:http://sishuok.com/abc/http://sishuok.com/abcde

Location区段-3

3:~ 表示:指定的正则表达式要区分大小写,如:server {    server_name sishuok.com;    location ~ ^/abc$ {    ……    }}那么,如下是对的:http://sishuok.com/abchttp://sishuok.com/abc?p1=11&p2=22如下是错的:http://sishuok.com/ABChttp://sishuok.com/abc/http://sishuok.com/abcde

Location区段-4

4:~* 表示:指定的正则表达式不区分大小写,如:server {    server_name sishuok.com;    location ~* ^/abc$ {    ……    }}那么,如下是对的:http://sishuok.com/abchttp://sishuok.com/ABChttp://sishuok.com/abc?p1=11&p2=22如下是错的:http://sishuok.com/abc/http://sishuok.com/abcde

Location区段-5

  • 5:^~ 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配, 那么就停止搜索其他模式了。
  • 6:@ :定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请
    求来访问,如try_files或error_page等

查找顺序和优先级
1:带有“=“的精确匹配优先
2:没有修饰符的精确匹配
3:正则表达式按照他们在配置文件中定义的顺序
4:带有“^~”修饰符的,开头匹配
5:带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
6:没有修饰符的,如果指定字符串与URI开头匹配

Location区段匹配示例

location = / {    # 只匹配/ 的查询.    [ configuration A ]}location / {    # 匹配任何以/ 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。    [ configuration B ]}location ^~ /images/ {    # 匹配任何以/images/ 开始的查询并且停止搜索,不检查正则表达式。    [ configuration C ]}location ~* \.(gif|jpg|jpeg)$ {    # 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有/images/ 目录的请求将在Configuration C中处    理。    [ configuration D ]}各请求的处理如下例:■/ → configuration A■/documents/document.html → configuration B■/images/1.gif → configuration C■/documents/1.jpg → configuration D

Http反向代理

  • Nginx通常被用作后端服务器的反向代理,这样就可以很方便的实现动静分离, 以及负载均衡,从而大大提高服务器的处理能力。
  • Http Proxy模块,功能很多,最常用的是proxy_pass,最好还是都看看。
  • 如果要使用proxy_cache的话,需要集成第三方的ngx_cache_purge模块,用来清
    除指定的URL缓存。这个集成需要在安装nginx的时候去做,形如:
    ./configure –add-module=../ngx_cache_purge-1.0 ……

动静分离

  • Nginx实现动静分离,其实就是在反向代理的时候,如果是静态资源,那么就直 接从Nginx发布的路径去读取,而不需要从后台服务器获取了。
  • 但是要注意:这种情况下需要保证后端跟前端的程序保持一致,可以使用Rsync
    做服务端自动同步或者使用NFS、MFS分布式共享存储。

负载均衡

  • Nginx通过upstream模块来实现简单的负载均衡
  • 在upstream块内,定义一个服务器列表,默认的方式是轮询,如果要确定同一个
    访问者发出的请求总是由同一个后端服务器来处理,可以设置ip_hash,如:
upstream cctest1.com {         ip_hash       server 127.0.0.1:9080 weight=5;        server 127.0.0.1:8080 weight=5;       server 127.0.0.1:1111; } 

请注意:这个方法本质还是轮询,而且由于客户端的ip可能是不断变化的,比如动
态ip,代理,翻墙等等,因此ip_hash并不能完全保证同一个客户端总是由同一 个服务器来处理。

  • 更多指令和配置,请参考Nginx的http负载均衡模块

Geo和GeoIP模块

这两个模块主要用于做全局的负载均衡,可以根据不同的客户端ip来访问不同的
服务器,示例如下:

http{    geo $geo{        default default;        202.103.10.1/24 A;        179.9.0.3/24 B;        }    upstream default.server{        server 192.168.0.100; }    upstream A.server{        server 192.168.0.101; }    upstream B.server{        server 192.168.0.102; }    server{        listen 80;        location / {        proxy_pass http://$geo.server$request_uri;        }    }}

Rewrite模块配置-1

  • Rewrite模块:用来执行URL重定向。这个机制有利于去掉恶意访问的url,也有 利于搜索引擎优化(SEO)。
  • Nginx使用的语法源于Perl兼容正则表达式(PCRE)库,基本语法如下:
    ^ :必须以^后的实体开头
    前的实体结尾
    . :匹配任意字符
    [ ] :匹配指定字符集内的任意字符
    [^ ] :匹配任何不包括在指定字符集内的任意字符串
    | :匹配| 之前或之后的实体
    () :分组,组成一组用于匹配的实体,通常会有|来协助
  • 捕获子表达式,可以捕获放在()之间的任何文本,比如: ^(.*)(hello|sir)hisir1=hi $2=sir 这些被捕获的数据,在后面就可以当变量一样使用了

Rewrite模块配置-2

  • 内部请求 外部请求是客户端的url,内部请求是Nginx通过特殊的指令触发。
    比如:error_page、index、rewrite、try_files、include等等

  • 内部请求分成两种类型

  • 1:内部重定向:URI被改变,可能会匹配到其他的Location
    2:子请求:比如使用Addition模块,指令add_after_body允许你在原始的URI之
内部重定向示例:server {    server_name sishuok.com;        location /abc/ {        rewrite ^/abc/(.*)$ /bcd/$1    }    location /bcd/{        internal;        root pages;    }}

Rewrite模块配置-3

条件结构的基本语法:
1:没有操作符:指定的字符串或者变量不为空,也不为0开始的字符串,取true
2:= , != ,例:if(requestmethod=POST)3  ! ! if(uri ~* “\.jsp)4f,!f:if(frequest_filename){…}
5:-d,!-d :用来测试指定目录是否存在
6:-e,!-e:用来测试指定文件、目录或者符号链接是否存在
7:-x,!-x:用来测试指定文件是否存在和是否可以执行
8:break:跳出if块
9:return:终止处理,并返回一个指定的http状态码
10:set:初始化或者重定义一个变量

其它模块-1

  • Http Index模块,都看看
  • Http Referer模块,都看看,可用于防盗链
  • Http Limit Zone模块,都看看,可用于会话的连接数控制,如限制每个IP的并 发连接数等
  • Http Access模块,用于简单的访问控制,都看看
  • Http Charset模块,重点看看:charset
  • Gzip模块,可以都看看
  • Http Browser模块,用于按照请求头中的“User-agent”来创建一些变量,好为 不同的浏览器创建不同的内容,暂时了解即可
  • Memcached模块,这是把Nginx当作Memcached的客户端,用来连接Memcached的模 块。暂时不用看
  • Http Addition模块,可以在当前location内容之前或后添加内容,暂时不用看
原创粉丝点击