nginx 常用配置

nginx 的基本功能

静态资源的web服务器
http协议反向代理服务器
pop3/imap4协议反向代理服务器
FastCGI(lnmp),uWSGI(python)等协议
模块化(非DSO),如zip,SSL模块
官网:http://nginx.org

本文将列举常用nginx做为http 代理服务器的常用配置和配置说明:

nginx配置文件
主配置文件结构:
main block:主配置段,即全局配置段,对http,mail都有效
event {

} 事件驱动相关的配置
http {

} http/https 协议相关配置段
mail {

} mail 协议相关配置段
stream {

} stream 服务器相关配置段

基于ip地址控制:
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.0.0/16;
deny all; # 默认是允许所有的,需要在后面加上deny all
}

实现基于用户的访问控制,使用basic机制进行用户认证

1、auth_basic string | off; 
  2、auth_basic_user_file file; 
        location /admin/ { 
               auth_basic "Admin Area"; 
               auth_basic_user_file /etc/nginx/.ngxpasswd; 
        } 

对http 资源压缩

用gzip方法压缩响应数据,节约带宽

1、gzip on | off;
启用或禁用gzip压缩
2、gzip_comp_level level;
压缩比由低到高:1 到 9 默认:1
3、gzip_disable regex …;
匹配到客户端浏览器不执行压缩
4、gzip_min_length length;
启用压缩功能的响应报文大小阈值
5、gzip_http_version 1.0 | 1.1;
设定启用压缩功能时,协议的最小版本
默认:1.1
6、gzip_buffers number size;
支持实现压缩功能时缓冲区数量及每个缓存区的大小
默认:32 4k 或 16 8k
7、gzip_types mime-type …;
指明仅对哪些类型的资源执行压缩操作;即压缩过滤器
默认包含有text/html,不用显示指定,否则出错
8、gzip_vary on | off;
如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”
9、gzip_proxied off | expired | no-cache | no-store |
private | no_last_modified | no_etag | auth | any …;
nginx对于代理服务器请求的响应报文,在何种条件下启用压缩功能
off:对被代理的请求不启用压缩
expired,no-cache, no-store,private:对代理服务器请求的响应报文首部Cache-Control值任何一个,启用压缩功能

示例:
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/javascript;

root@localhost html]# curl -I –compressed http://192.168.1.1/source 通过curl 命令测试压缩效果

https 实现

1、ssl on | off;
为指定虚拟机启用HTTPS protocol, 建议用listen指令代替
2、ssl_certificate file;
当前虚拟主机使用PEM格式的证书文件
3、ssl_certificate_key file;
当前虚拟主机上与其证书匹配的私钥文件
4、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
支持ssl协议版本,默认为后三个
5、ssl_session_cache off | none | [builtin[:size]]
[shared:name:size];
builtin[:size]:使用OpenSSL内建缓存,为每worker进程私有
[shared:name:size]:在各worker之间使用一个共享的缓存
6、ssl_session_timeout time;
客户端连接可以复用ssl session cache中缓存的ssl参数的有效时长,默认5m

例:
{
listen 443 ssl;
server_name www.cnedu.com;
root /vhosts/ssl/htdocs;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
}

http rewrite

将用户请求的URI基于PCRE regex所描述的模式进行检查,而后完成重定向替换 ,比如: http://www.a.com/hn –> http://www.b.com/henan
重定向的flag 位:
last:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后对新的URI启动新一轮重写检查;提前重
启新一轮循环
break:重写完成后停止对当前URI在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它
配置;结束循环,建议在location中使用
redirect:临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求;
不能以http://或https://开头,使用相对路径,状态码:302
permanent:重写完成后以永久重定向方式直接返回重写后生成的新URI给客户端,由客户端重新发起请求,状态码:301
2、return
return code [text];
return code URL;
return URL;
停止处理,并返回给客户端指定的响应码
3、rewrite_log on | off;
是否开启重写日志, 发送至error_log (notice level)
4、set variablevalue; 开头
5、if (condition) { … }
引入新的上下文,条件满足时,执行配置块中的配置指令;server, location condition:
比较操作符:
== 相同
!= 不同
~:模式匹配,区分字符大小写
~*:模式匹配,不区分字符大小写
!~:模式不匹配,区分字符大小写
!~*:模式不匹配,不区分字符大小写
文件及目录存在性判断:
-e, !-e 存在(包括文件,目录,软链接)
-f, !-f 文件
-d, !-d 目录
-x, !-x 执行
示例:
server {
listen 443 ssl;
server_name www.a.com;
root /app/web;
ssl_certificate /etc/nginx/ssl/nginx.crt;
rewrite ^/bj/(.*) /beijing/ 1 permanent;
location /wendang {
}
rewrite ^/bj/(.) /beijing/ 1 permanent; 表示把网站中访问bj 的 替换成beijing (.)

防止网站盗链

1、valid_referers none|blocked|server_names|string …;
定义referer首部的合法可用值,不能匹配的将是非法值
none:请求报文首部没有referer首部
blocked:请求报文有referer首部,但无有效值
server_names:参数,其可以有值作为主机名或主机名模式
arbitrary_string:任意字符串,但可使用*作通配符
regular expression:被指定的正则表达式模式匹配到的字符串,要使用~开头,例如: ~.*.abc.com
示例:

server {
          location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$
        root /app/web2;
        server_name www.b.com;
   valid_referers none block server_names *.b.com  ~\.baidu\.  ~\.google\.;
if ($invalid_referer) {
   return 301 http://www.b.com/xuanchuan.html;       只允许 来自b 网站和百度 谷歌请求,否则让转为 b 网站的宣传页。
   表示对以jpg、gif、png、swf、flv、wma、wmv、asf、mp3、mmf、zip和rar为后缀的文件实行防盗链处理。

http_proxy

http proxy 可以实现访问A网站的时候跳转到B网站,例如:
server {

server_name HOSTNAME;
location /uri/ {
proxy_pass http://host/new_uri/;
}

}
http://HOSTNAME/uri/ –> http://host/new_uri/
注意:proxy_pass后面的路径不带/ ,会将location的uri传递给后端主机;proxy_pass后面的路径后以 / 结束时,其会将location的uri替换为proxy_pass的uri 。下面举个例子以便更好的理解。
server {
listen 80 default_server;
root /app/web2;
server_name www.b.com;
location /ss.txt {
proxy_pass http://192.168.10.30/;
} 这个表示 www.b.com/ss.txt 的时候会跳转到http://192.168.10.30/
如果 写成
location /ss.txt {
proxy_pass http://192.168.10.30;
表示访问www.b.com/ss.txt 跳转到 http://192.168.10.30/ss.txt 目录下。
通俗的来说:有/ 表示替换 没有/ 表示追加 这个非常重要!

http_upstream

http upstream 功能用于将多个服务器定义成服务器组,而由proxy_pass, fastcgi_pass等指令进行引用
1、upstream name { … }
定义后端服务器组,会引入一个新的上下文
默认调度算法是wrr
2、server address [parameters];
在upstream上下文中server成员,以及相关的参数;Context:upstream address的表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
weight=number 权重,默认为1
max_conns 连接后端报务器最大并发活动连接数,1.11.5后支持
max_fails=number 失败尝试最大次数;超出此处指定的次数时,server将被标记为不可用,默认为1
fail_timeout=time 后端服务器标记为不可用状态的连接超时时长,默认10s
backup 将服务器标记为“备用”,即所有服务器均不可用时才启用
down 标记为“不可用”,配合ip_hash使用,实现灰度发布
 3、ip_hash 源地址hash调度方法
 4、least_conn 最少连接调度算法,当server拥有不同的权
重时其为wlc,当所有后端主机连接数相同时,则使用wrr,适用于长连接
 5、hash key [consistent] 基于指定的key的hash表来实
现对请求的调度,此处的key可以直接文本、变量或二者组合
作用:将请求分类,同一类请求将发往同一个upstream
server,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用
hash requesturiconsistent;hash remote_addr;
 6、keepalive 连接数N;
为每个worker进程保留的空闲的长连接数量,可节约nginx端口,并减少连接管理的消耗
7、health_check [parameters];
健康状态检测机制;只能用于location上下文
常用参数:
interval=time检测的频率,默认为5秒
fails=number:判定服务器不可用的失败检测次数;默认为1次
passes=number:判定服务器可用的失败检测次数;默认为1次
uri=uri:做健康状态检测测试的目标uri;默认为/
match=NAME:健康状态检测的结果评估调用此处指定的match配置块
注意:仅对nginx plus有效
 8 match name { … }
对backend server做健康状态检测时,定义其结果判断机制;只能用于http上下文
 常用的参数:
status code[ code …]: 期望的响应状态码
header HEADER[operator value]:期望存在响应首
部,也可对期望的响应首部的值基于比较操作符和值进行比较
body:期望响应报文的主体部分应该有的内容
注意:仅对nginx plus有效
示例:
在nginx http 板块中定义:
upstream webs {
server 192.168.10.30:80 weight=1;
server 192.168.10.34:80 weight=1;
least connection;
}
在vhost 板块里定义:
location /ss.txt {
proxy_pass http://webs;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值