nginx基础知识

2018-08-07  本文已影响0人  毛球小二

nginx主配置文件 nginx.conf

配置文件结构如下:

worker_process        # 表示工作进程的数量, 一般设置为cpu的核数
worker_connections    # 表示每个工作进程的最大连接数
server{}              # 块定义了虚拟主机
    listen            # 监听端口
    server_name       # 监听域名
    location {}       # 是用来为匹配的 URI 进行配置, URI 即语法中的“/uri/”
    location /{}      # 匹配任何查询, 因为所有请求都以 / 开头
        root          # 指定对应uri的资源查找路径, 这里html为相对路径, 完整路径为
                      # /opt/nginx-1.7.7/html/
        index         # 指定首页index文件的名称, 可以配置多个, 以空格分开。 如有多
                      # 个, 按配置顺序查找。

location匹配规则

语法规则
location [=|~|~*|^~] /uri/ { … }

模式 含义
location = /uri = 表示精确匹配, 只有完全匹配上才能生效
location ^~ /uri ^~ 开头对URL路径进行前缀匹配, 并且在正则之前。
location ~ pattern 开头表示区分大小写的正则匹配
location ~* pattern 开头表示不区分大小写的正则匹配
location /uri 不带任何修饰符, 也表示前缀匹配, 但是在正则匹配之后
location / 通用匹配, 任何未匹配到其它location的请求都会匹配到, 相当于switch中的default

rewrite语法

  1. 下面是可以用来判断的表达式:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行
  1. 下面是可以用作判断的全局变量
例: http://localhost:88/test1/test2/test.php?k=v
$host: localhost
$server_port: 88
$request_uri: /test1/test2/test.php?k=v
$document_uri: /test1/test2/test.php
$document_root: D:\nginx/html
$request_filename: D:\nginx/html/test1/test2/test.php

redirect语法

server {
    listen 80;
    server_name start.igrow.cn;
    index index.html index.php;
    root html;
    if ($http_host !~ "^star\.igrow\.cn$") {
        rewrite ^(.*) http://star.igrow.cn$1 redirect;
    }
}

防盗链

location ~* \.(gif|jpg|swf)$ {
    valid_referers none blocked start.igrow.cn sta.igrow.cn;
    if ($invalid_referer) {
        rewrite ^/ http://$host/logo.png;
    }
}

根据文件类型设置过期时间

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
    if (-f $request_filename) {
        expires 1h;
        break;
    }
}

禁止访问某个目录

location ~* \.(txt|doc)${
    root /data/www/wwwroot/linuxtone/test;
    deny all;
}

使用if指令测试一个变量

if ($request_method = POST) {
    return 405;
} 

if ($args ~ post=140){
    rewrite ^ http://example.com/ permanent;
}

最佳实践: 在if指令块内,最好只有 return ...; rewrite ... last; 指令。其他指令执行不一定会是预期的结果。

静态文件服务

server {
    listen 80;
    server_name www.test.com;
    charset utf-8;
    root /data/www.test.com;
    index index.html index.htm;
}

日志

access_log 访问日志

默认的访问日志:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    ' "$request" $status $body_bytes_sent '
                    ' "$http_referer" "$http_user_agent" ';

access_log中可用字段如下:

字段 作用
$remote_addr与 $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URI和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数, 不包括响应头的大小
$bytes_sent 发送给客户端的总字节数
$connection 连接的序列号
$connection_requests 当前通过一个连接获得的请求数量
$msec 日志写入时间。 单位为秒, 精度是毫秒
$pipe 如果请求是通过HTTP流水线(pipelined)发送, pipe值为“p”, 否则为“.”
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度( 包括请求行, 请求头和请求正文)
$request_time 请求处理时间, 单位为秒, 精度毫秒
$time_iso8601 ISO8601标准格式下的本地时间
$time_local 记录访问时间与时区

error_log 错误日志

error_log 主要记录客户端访问 Nginx 出错时的日志, 格式不支持自定义。
error_log 指令用来指定错误日志, 语法: error_log path [level] ;

反向代理

反向代理( Reverse Proxy) 方式是指用代理服务器来接受网络的连接请求, 然后将请求转发给内部网络上的服务器, 并将从服务器上得到的结果返回给网络请求连接的客户端, 此时代理服务器对外就表现为一个反向代理服务器。

负载均衡

upstream 负载均衡概要

配置如下:

upstream test.net{
    ip_hash;
    server 192.168.10.13:80;
    server 192.168.10.14:80 down;
    server 192.168.10.15:8009 max_fails=3 fail_timeout=20s;
    server 192.168.10.16:8080;
} 

server {
    location / {
        proxy_pass http://test.net;
    }
}

upstream支持的负载均衡算法

upstream支持的状态参数

配置nginx负载均衡

upstream webservers {
    server 192.168.18.201 weight=1;
    server 192.168.18.202 weight=1;
} 

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_pass http://webservers;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

注, upstream 是定义在 server{ } 之外的, 不能定义在 server{ } 内部。 定义好 upstream之后, 用 proxy_pass 引用一下即可.

配置nginx进行健康状态检查
利用 max_fails、 fail_timeout 参数, 控制异常情况

upstream webservers {
    server 192.168.18.201 weight=1 max_fails=2 fail_timeout=2;
    server 192.168.18.202 weight=1 max_fails=2 fail_timeout=2;
}

配置backup服务器
当所有服务器都不能提供服务,给用户展示提示错误的页面:

server {
    listen 8080;
    server_name localhost;
    root /data/www/errorpage;
    index index.html;
}

负载均衡配置:

upstream webservers {
    server 192.168.18.201 weight=1 max_fails=2 fail_timeout=2;
    server 192.168.18.202 weight=1 max_fails=2 fail_timeout=2;
    server 127.0.0.1:8080 backup;
}

配置ip_hash负载均衡

upstream webservers {
    ip_hash;
    server 192.168.18.201 weight=1 max_fails=2 fail_timeout=2;
    server 192.168.18.202 weight=1 max_fails=2 fail_timeout=2;
}
上一篇 下一篇

猜你喜欢

热点阅读