liunx 下载nginx
- 1、使用yum安装nginx需要包括Nginx的库,安装Nginx的库
// 终端命令
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
// 终端命令
yum install nginx
// 启动nginx
service nginx start
// 停止nginx
service nginx stop
// 重新启动nginx
service nginx reload
- 4 nginx基本配置( nginx的注释是#而不是//)
// 定义Nginx运行的用户和用户组,系统中必须有此用户,可以是nologin
#user nobody;
// 动进程,通常设置成和cpu的数量相等
worker_processes 1;
// 全局错误日志及PID文件(默认是注释的)
// 错误日志定义等级,[ debug | info | notice | warn | error | crit ]
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
// epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;
// 单个后台worker process进程的最大并发链接数 (最大连接数=连接数*进程数)
worker_connections 1024;
}
http {
// 设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
// 设定日志格式,指定存放日子的路径(默认是注释的)
#access_log logs/access.log main;
// sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
// 连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
// 开启gzip压缩(默认是注释,使用的时候要打开)
#gzip on;
#gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
#包含其它配置文件,如自定义的虚拟主机
include /etc/nginx/conf.d/*.conf
}
server {
// 监听端口
listen 8080;
// 使用的 localhost 访问
server_name localhost;
#charset koi8-r;
// 设定本虚拟主机的访问日志
#access_log logs/host.access.log main;
location / {
// 定义服务器的默认网站根目录位置
root /Users/jackteng/code/ouyangshiping;
// 定义首页索引文件的名称
index index.html index.htm;
}
#error_page 404 /404.html;
// 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /Users/jackteng/code/ouyangshiping;
#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
expires 30d;
}
}
http {
// 设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
// 设定日志格式,指定存放日子的路径(默认是注释的)
#access_log logs/access.log main;
// sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
// 连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
// 开启gzip压缩(默认是注释,使用的时候要打开)
#gzip on;
#gzip_disable "MSIE [1-6]\.(?!.*SV1)";
// 设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
// 设定负载均衡的服务器列表
upstream mysvr {
// weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
server 192.168.8.2x:80 weight=1;
server 192.168.8.3x:80 weight=6;
}
upstream mysvr2 {
// weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.x:80 weight=1;
server 192.168.8.x:80 weight=6;
}
// 包含其它配置文件,如自定义的虚拟主机
include /etc/nginx/conf.d/*.conf
}
server {
// 监听192.168.8.x的80端口
listen 80;
server_name localhost;
// 对aspx后缀的进行负载均衡请求
location ~ .*\.aspx$ {
// 定义服务器的默认网站根目录位置
root //Users/jackteng/code/ouyangshiping;
// 定义首页索引文件的名称
index index.php index.html index.htm;
// 请求转向mysvr
proxy_pass http://mysvr ;
// 定义的服务器列表
// 以下是一些反向代理的配置.
proxy_redirect off;
// 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
// 允许客户端请求的最大单文件字节数
client_max_body_size 10m;
// 缓冲区代理缓冲用户端请求的最大字节数,
client_body_buffer_size 128k;
// nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
// 后端服务器数据回传时间(代理发送超时)
proxy_send_timeout 90;
// 连接成功后,后端服务器响应时间(代理接收超时)
proxy_read_timeout 90;
// 设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffer_size 4k;
// proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_buffers 4 32k;
// 高负荷下缓冲大小(proxy_buffers*2)
proxy_busy_buffers_size 64k;
// 设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_temp_file_write_size 64k;
}
}
范例:location [=|~|~*|^~] /uri/ { ... }
1)= 表示精确匹配,这个优先级也是最高的
2)^~ 表示 uri 以某个常规字符串开头,理解为匹配 url 路径即可。nginx 不对 url 做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa 匹配到(注意是空格)
3)~ 表示区分大小写的正则匹配
4)~* 表示不区分大小写的正则匹配(和上面的唯一区别就是大小写)
5)!~和!~*分别为区分大小写不匹配及不区分大小写不匹配的正则
6)/ 通用匹配,任何请求都会匹配到,默认匹配
优先级(=) > (^~) > (~|~*|!~|!~*) > (/)
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ configuration A ]
}
location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ configuration F ]
}
location /images/abc {
# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
# F与G的放置顺序是没有关系的
[ configuration G ]
}
location ~ /images/abc/ {
# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ configuration H ]
}
location ~* /js/.*/\.js
if判断指令
语法为if(condition){...},对给定的条件condition进行判断。如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容:
当表达式只是一个变量时,如果值为空或任何以0开头的字符串都会当做false
直接比较变量和内容时,使用=或!=
~正则表达式匹配,~*不区分大小写的匹配,!~区分大小写的不匹配
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
} //如果UA包含"MSIE",rewrite请求到/msid/目录下
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
} //如果cookie匹配正则,设置变量$id等于正则引用部分
if ($request_method = POST) {
return 405;
} //如果提交方法为POST,则返回状态405(Method not allowed)。return不能返回301,302
if ($slow) {
limit_rate 10k;
} //限速,$slow可以通过 set 指令设置
if (!-f $request_filename){
break;
proxy_pass http://127.0.0.1;
} //如果请求的文件名不存在,则反向代理到localhost 。这里的break也是停止rewrite检查
if ($args ~ post=140){
rewrite ^ http://example.com/ permanent;
} //如果query string中包含"post=140",永久重定向到example.com
location ~* \.(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.jefflei.com www.leizhenfang.com;
if ($invalid_referer) {
return 404;
} //防盗链
}
$args : 这个变量等于请求行中的参数,同$query_string
$content_length : 请求头中的Content-length字段。
$content_type : 请求头中的Content-Type字段。
$document_root : 当前请求在root指令中指定的值。
$host : 请求主机头字段,否则为服务器名称。
$http_user_agent : 客户端agent信息
$http_cookie : 客户端cookie信息
$limit_rate : 这个变量可以限制连接速率。
$request_method : 客户端请求的动作,通常为GET或POST。
$remote_addr : 客户端的IP地址。
$remote_port : 客户端的端口。
$remote_user : 已经经过Auth Basic Module验证的用户名。
$request_filename : 当前请求的文件路径,由root或alias指令与URI请求生成。
$scheme : HTTP方法(如http,https)。
$server_protocol : 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$server_addr : 服务器地址,在完成一次系统调用后可以确定这个值。
$server_name : 服务器名称。
$server_port : 请求到达服务器的端口号。
$request_uri : 包含请求参数的原始URI,不包含主机名,如:”/foo/bar.php?arg=baz”。
$uri : 不带请求参数的当前URI,$uri不包含主机名,如”/foo/bar.html”。
$document_uri : 与$uri相同。