目录

Nginx的概念

Nginx的系统架构

Nginx的服务过程

Nginx.conf配置讲解

自定义日志格式

Location语法

Nginx的具体应用

一、Nginx+Lua实现动态黑名单

二、基于Nginx 的静态缓存

三、基于Nginx 图片防盗链

四、子域名展示

五、多个config配置

六、动静态分离解决跨域

附录1:Nginx 日志格式变量说明

附录2:Nginx的安装

附录3:添加nginx服务


Nginx的概念

正向代理代理的是客户端
反向代理代理的是服务端

Nginx是一个高性能的HTTP和反向代理服务器,单台Nginx服务器最多能够支持高达50000的并发请求,所以一般情况下,会将Nginx作为静态资源的访问服务器或者作为访问流量分流的服务器
主要特点:占用内存少,并发能力强,扩展容易

Nginx的系统架构

nginx配置use epoll后,以异步非阻塞方式工作,能够轻松处理百万级的并发连接

nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程

Nginx的服务过程

从功能上来分有三种:
handlers 处理器模块
filter
proxies

Nginx.conf配置讲解

# 指定nginx 用户及用户组  user xx xx
#user  nobody;
# 指定nginx 工作进程 根据硬件调整 通常等于cpu 核数
worker_processes  1;
# 全局错误信息(warn)
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# PID(进程标识符) 存储目录
#pid        logs/nginx.pid;gzip on;
gzip_disable "msie6";#为指定的客户端禁用gzip功能
gzip_proxied any;#压缩所有的请求
gzip_min_length 1000;#数据启用压缩的最少字节数
gzip_comp_level 4;#设置数据的压缩等级#设置需要压缩的数据格式
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss tex#负载均衡
upstream demo {server 127.0.0.1:8080    weight=1;#权重,值越高,分配到的几率越高server 127.0.0.2:8081    down;#down表示这台机器不参与server 127.0.0.2:8081    backup;}
upstream moblie {server 192.168.80.123:8080;server 192.168.80.124:8080;
}upstream img {server 192.168.80.123:8080;server 192.168.80.124:8080;
}events {#连接上限 worker_connections  1024;
}设定http服务器
http {# 文件扩展名与文件类型映射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#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;# 设定虚拟主机server {listen       80; # 监听端口号server_name  localhost; 域名 可以有多个 用空格隔开#charset koi8-r;# 设定虚拟主机访问的日志#access_log  logs/host.access.log  main;#手机站点与PC站点分离set $mobile_rewrite 1;if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {set $mobile_rewrite 0;}if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {set $mobile_rewrite 0;}location / {#proxy_pass http://demo;if ($mobile_rewrite = 0) {proxy_pass http://moblie;}proxy_pass http://demo;index  index.html index.htm;}#动静分离  **.do **.aciton  js css jpg gif htmllocation ~ .*\.(jpg|gif)$ {root http://img;}}server {listen    80;server_name    www.demo.com;access_log    logs/dome.access.log;location / {proxy_pass http://demo;index index.html;root html;}}}

自定义日志格式

使用系统默认处理起来非常的复杂,而且生成的日志格式字段可能我并不全需要或者不满足我现在要求。怎么解决?自定义日志格式

# 1、去掉下面2部分注释
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;

# 2、添加自定义日志格式
log_format bf_log '$remote_addr^A$http_host^A$msec^A$request_uri';(分号必不可少)

# 3、 开启日志目录
    location =/bf.gif{
        default_type image;(分号必不可少)
        access_log logs/bf.log bf_log;(分号必不可少)
    }

# 4、生成的日志格式
172.16.100.35^Abigdata-spark04.ibeifeng.com^A1479985996.537^A/bf.gif

Location语法

配置语法
location [= | ~* | ^~ ] /uri/ {...}

配置规则
location = /uri 精准匹配
location ^~ /uri 前缀匹配
location ~ /uri
location / 通用匹配

规则的优先级

1 location = /
2 location = /index
3 location ^~ /article/
4 location ^~ /article/files/
5 location ~ \.(gif|png|js|css)$
6 location /

http://192.168.11.154/
http://192.168.11.154/index ->2
http://192.168.11.154/article/files/1.txt ->4
http://192.168.11.154/mic.png ->5

1. 精准匹配是优先级最高
2. 普通匹配(最长的匹配)
3. 正则匹配

实际使用建议
location =/ {

location / {

location ~* \.(gif|....)${
}

Nginx的具体应用

一、Nginx+Lua实现动态黑名单

1.安装Redis

wget http://download.redis.io/redis-stable.tar.gz

进入redis根目录执行 make PREFIX=/usr/local/redis  install

mv redis.conf /usr/local/redis/etc

vi /usr/local/redis/etc/redis.conf //将daemonize no 改成daemonize yes

设置开机启动:/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

2.安装LuaJIT(可不安装)

LuaJIT 和 Lua 的一个区别是,LuaJIT 的运行速度比标准 Lua 快数十倍,可以说是一个 Lua 的高效率版本。

cd /usr/local/src 
wget http://luajit.org/download/LuaJIT-2.1.0-beta2.tar.gz 
tar zxf LuaJIT-2.1.0-beta2.tar.gz 
cd LuaJIT-2.1.0-beta2 
make PREFIX=/usr/local/luajit 
make install PREFIX=/usr/local/luajit

配置lua的环境变量

export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.1

3.下载lua-nginx-module 模块

yum -y update nss #nss版本过于陈旧,升级即可

cd /usr/local

git clone https://github.com/chaoslawful/lua-nginx-module.git

4.下载ngx_devel_kit(NDK)

cd /usr/local

wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.19.tar.gz

tar -xzvf v0.2.19

5.安装lua-redis-parser,lua-resty-redis是openresty(1.9.15.1)的一个组件,简单来说,它提供一个lua语言版的redis API,使用socket(lua sock)和redis通信

git clone https://github.com/openresty/lua-resty-redis.git

mv lua-resty-redis /usr/local/nginx/lua/lua-resty-redis

6.进入之前安装nginx的解压目录,重新编译安装(引入LuaJIT并加入ngx_devel_kit-0.2.19和lua-nginx-module的目录)

sudo ./configure --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" --add-module=/usr/local/ngx_devel_kit-0.2.19 --add-module=/usr/local/lua-nginx-module-0.10.2

编译安装

sudo make -j2

make  install

7.nginx.conf的配置

http {

lua_package_path "/usr/local/nginx/lua/lua-resty-redis/lib/?.lua;;";

#由 Nginx 进程分配一块 1M 大小的共享内存空间,用来缓存 IP 黑名单
    lua_shared_dict ip_blacklist 1m;
    
    server {
        listen       8081;
        server_name  hadoop.senior02;

location ~ .*(BfImg)\.(gif)$ {
          default_type image/gif;
          access_log /home/hadoop/access.log log_format;
          root /usr/local/nginx/conf/www/source; 
            }
        
         location = /ipblacklist {
                 access_by_lua_file conf/lua/ip_blacklist.lua;
                 default_type text/html;
                    content_by_lua 'ngx.say("<p>hello, lua</p>")';
             }
    }

}

ip_blacklist.lua文件

local redis = require("resty.redis")
local ngx_log = ngx.log
local ngx_ERR = ngx.ERR
local ngx_INFO = ngx.INFO
local ngx_exit = ngx.exit
local ngx_var = ngx.var

-- 黑名单缓存60秒
local cache_idle = 60
local forbidden_list = ngx.shared.forbidden_list

local function close_redis(red)
    if not red then
        return
    end
    -- 释放连接(连接池实现)
    local pool_max_idle_time = 100000 -- 毫秒
    local pool_size = 100  -- 连接池大小
    local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)
    
    if not ok then
        ngx_log(ngx_ERR, "set redis keepalive error : ", err)
    end
end

-- 从redis获取ip黑名单列表
local function get_forbidden_list()
    local red = redis:new()
    red:set_timeout(10000)
    local ip = "192.168.226.4"
    local port = 6379
    --local password = ""
    local ok, err = red:connect(ip, port)
    if not ok then
        ngx_log(ngx_ERR, "connect to redis error : ", err)
        close_redis(red)
        return
    end
    
    --local res, err = red:auth(password)
    --if not res then
    --    ngx_log(ngx_ERR, "failed to authenticate: ", err)
    --    close_redis(red)
    --   return
    --end
    
    local resp, err = red:smembers("forbidden_list")
    if not resp then
        ngx_log(ngx_ERR, "get redis connect error : ", err)
        close_redis(red)
        return
    end
    -- 得到的数据为空处理
    if resp == ngx.null then
        resp = nil
    end
    close_redis(red)
    
    return resp
end

-- 刷新黑名单
local function reflush_forbidden_list()
    local current_time = ngx.now()
    local last_update_time = forbidden_list:get("last_update_time");
    
    if last_update_time == nil or last_update_time < (current_time - cache_idle) then
        local new_forbidden_list = get_forbidden_list();
        if not new_forbidden_list then
            return
        end
        
        forbidden_list:flush_all()
        for i, forbidden_ip in ipairs(new_forbidden_list) do
            forbidden_list:set(forbidden_ip, true);
        end
        forbidden_list:set("last_update_time", current_time);
    end
end

reflush_forbidden_list()
local ip = ngx_var.remote_addr
if forbidden_list:get(ip) then
    ngx_log(ngx_INFO, "forbidden ip refused access : ", ip)
    return ngx_exit(ngx.HTTP_FORBIDDEN)
end

8.效果演示

redis-cli

#添加黑名单

SADD forbidden_list "127.0.0.1"

#移除黑名单

SREM forbidden_list "127.0.0.1"

访问http://hadoop.senior02:8081/ipblacklist

二、基于Nginx 的静态缓存

某电商平台商品详情页需要实现 700+ QPS,如何着手去做?

问题:当达到500QPS 的时候很难继续压测上去。
分析原因:一个详情页html 主体达平均150 kb 那么在500QPS 已接近局域网宽带极限。必须减少内网通信。

解决方案:

一、在http元素下添加缓存区声明。
proxy_cache_path /data/nginx/cache_item levels=1:1:2 keys_zone=cache_item:500m
inactive=30d max_size=10g;
二、为指定location 设定缓存策略。
proxy_cache cache_item;
proxy_cache_key $host$uri$is_args$args;#以全路径md5值做做为Key
proxy_cache_valid 200 304 12h; #对不同的HTTP状态码设置不同的缓存时间
expires 7d; #总体缓存时间

缓存的清除:
该功能可以采用第三方模块 ngx_cache_purge 实现。

为nginx 添加 ngx_cache_purge 模块
#下载ngx_cache_purge 模块包 ,这⾥nginx 版本为1.6.2 purge 对应2.0版
wget http://labs.frickle.com/files/ngx_cache_purge-2.0.tar.gz#查看已安装模块
./sbin/nginx -V

#进⼊nginx安装包⽬录 重新安装 --add-module为模块解压的全路径
./configure --prefix=/root/svr/nginx --with-http_stub_status_module --with-http_ssl_module --
add-module=/root/svr/nginx/models/ngx_cache_purge-2.0

#重新编译
make

#拷⻉ 安装⽬录/objs/nginx ⽂件⽤于替换原nginx ⽂件
#检测查看安装是否成功
nginx -t

清除配置:
location ~ /purge(/.*) {
   #允许访问的IP
   allow 127.0.0.1;
   allow 192.168.0.193;
   #禁⽌访问的IP
   deny all;
   #配置清除指定缓存区和路径(与proxy_cache_key⼀⾄)
   proxy_cache_purge cache_item $host$1$is_args$args;
}

三、基于Nginx 图片防盗链

什么是图片防盗链?意思是指本站内图片、CSS等资源只有本站点可以访问,不允许其它站点打开。该功能如果用JAVA如何实现?很单简单,只要判断一下 请求头当中的referer 属性是否为 指定域名即可。Nginx原理类似。
防盗链配置:
location ~* \.(gif|png|jpg|swf|flv)$ {
   root html;
   valid_referers none *.tl.com;
   if ($invalid_referer) {
       rewrite ^/ http://www.tl.com/image/403.png;
       #return 404;
    }
}
 
说明:如果 valid_referers 条件判断未通过,nginx 则会赋值 invalid_referer 为true
语法: valid_referers none | blocked | server_names | string ...;
参数说明:

none                   不允许 “Referer” 来源头部为空的情况
blocked               不允许“Referer”值为空情况,有可能Referer的值被代理或者防火墙删除
server_names    “Referer”来源头部包必须含当前的server_names (当前域名)可以多个

四、子域名展示

有时会有这样的需求,每个子域名对应一个静态站点(类似58到家、有赞商城等)。如果每天增加一个域名会相当麻烦。在nginx 当中可直接基于$host 连接到对应目录。具体配置实现如下:
server {
  listen 80;
  server_name *.tl.com;
  root /data/www/$host;
  access_log logs/$host.access.log;
   location / {
            index index.html;
     }
}

五、多个config配置

在我们的一台服务器上,一个nginx服务器下面可能跑着许多许多的项目;那么就需要配置多个对应的配置 端口号 已经文件入库目录等等那么项目多了以后,把这些项目都写到一个文件里 到后期难以查看与管理我们只需要新建一个文件夹,下面全部存放 我们的子配置 然后在主配置中把这个子目录引入即可

include /etc/nginx/default.conf;
include /etc/nginx/upstream/*.conf;
include /etc/nginx/conf.d/*.conf; // 这里就是引入的子配置文件夹

一个范例 子配置的conf

server {
    listen       832; // 端口号
    server_name localhost; // 域名
    index index.html index.htm index.php;
    root  /home/www/ai/crm/web/public; //项目的入口文件夹

location ~ /.svn/ {
        deny all;
    }

location / {
        rewrite ^/$ /index.php last;
        rewrite ^/(?!index\.php|index\.html|layui|css|js|bootstrap|robots\.txt)(.*)$ /index.php/$1 last;
    }

location ~/uploads/.*\.(php|php5)?$ {
        deny all;
    }
    location ~/public/.*\.(php|php5)?$ {
        deny all;
    }

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
      expires      30d;
    }

location ~ .*\.(js|css)?$ {
      expires      8d;
    }
    #access_log  /www/logs/access.log  main;

}

六、动静态分离解决跨域

后端,用户通过 http://www.javaboy.org/jinlu/** 格式的地址就可以访问到我服务端的接口。

upstream zqq.com{
server 127.0.0.1:9999 weight=2;
}

location /jinlu/ {
proxy_pass http://zqq.com;
tcp_nodelay on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

前端 ,用户通过 http://www.javaboy.org/jinlu-admin/**格式的请求就可以访问到前端资源了。

location /jinlu-admin/ {
root /usr/local/nginx/html/jinlu-admin/;#所有静态文件直接读取硬盘
expires 30d; #缓存30天
}

备注:生产一般不用

https://mp.weixin.qq.com/s/okKU5VmBxwyht09TGTNdBQ

附录1:Nginx 日志格式变量说明

变量名称            变量描述                                 举例说明
$remote_addr         客户端地址                                113.140.15.90
$remote_user        客户端用户名称          
$time_local             访问时间和时区                             18/Jul/2012:17:00:01 +0800
$request_time        请求的URI和HTTP协议                        “GET /pa/img/home/logo-alipay-t.png HTTP/1.1″
$http_host             请求地址,即浏览器中你
输入的地址(IP或名)                   
 img.alipay.com  10.253.70.103
$status                    HTTP请求状态          200
$upstream_status   upstream状态            200
$body_bytes_sent   发送给客户端文件内容大小                  547
$http_referer          跳转来源     “https://cashier.alipay.com…/”

$http_user_agent

用户终端代理 “Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C;
$ssl_protocol         SSL协议版本              TLSv1
$ssl_cipher                       交换数据中的算法             RC4-SHA

$upstream_addr

 后upstream的地址, 即真正提供服务的主机地址                     10.228.35.247:80
$request_time                  整个请求的总时间                0.205
$upstream_response_time     请求过程中upstream响应时间          0.002
$msec                  日志写入时间。单位为秒,精度是毫秒。  
$request_uri           从客户端发送来的原生请求URI,包括参数它不可以进行修改                       "/foo/bar.php?arg=baz"
$uri                   变量指当前的请求URI,不包括任何参数          "/foo/bar.php" 

附录2:Nginx的安装

yum install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl
openssl-devel
1)wget 官网下载地址
2)tar zxvf 源码包
3)cd /解压的nginx目录下
4)./configure  生成编译的makefile   ./configure --prefix=...
5)make &&make install

/server/nginx/sbin/nginx nginx 启动
    ./nginx -v   #可查看版本
        nginx version: nginx/1.10.3
        
    ./nginx -V    #可查看编译情况
        built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 
        configure arguments: --prefix=/server/nginx
    ./nginx -t    
        nginx: the configuration file /server/nginx/conf/nginx.conf syntax is ok
        nginx: configuration file /server/nginx/conf/nginx.conf test is successful
    ./nginx -s reload 重新加载配置文件
        配置文件修改了,一定要重新启动
    ./nginx -c filename     用户指定启动时使用的其他配置文件    
    Nginx的停止方式:
        快速停止,平滑停止
        kill -TERM pid  快速停止,服务还没有停止,进程就已经停止(kill -9 pid)
        kill -QUIT  pid 平滑停止     把请求关掉之后,再把进程关掉(/nginx -s stop)
     
    Nginx的升级
        nginx可以实现平滑升级,既不影响现在的服务前提下实现升级
        前提条件:新的安装路径和旧的安装路径保持一致,最好备份旧的服务器
        1)安装新的服务器
        2)发送USR2信号实现平滑升级
            kill -USR2 pid 或者 /server/nginx/logs/nginx.pid
        3)发送平滑停止旧的服务器信号
            kill -WHICH pid信号 /nginx/logs/nginx.pid
        -rw-r--r-- 1 root root 2656 Feb 24 16:30 nginx.conf
        -rw-r--r-- 1 root root 2656 Feb 24 16:30 nginx.conf.default  ##备份文件

附录3:添加nginx服务

1)在/etc/init.d目录下 touch nginx 创建一个nginx脚本文件,文件内容拷贝下面这个nginx.txt文件(注意不要直接将下面这个文件上传到/etc/init.d目录下,另外该文件里面指定的Nginx安装路径要改为实际安装路径)

2)chmod 755 /etc/init.d/nginx

3) 设置开机自启动 chkconfig nginx on && chkconfig --list | grep nginx

nginx.txt内容

#!/bin/bash
#
# chkconfig: - 85 15
# description: nginx is a World Wide Web server. It is used to serve
# Source function library.
. /etc/rc.d/init.d/functions# Source networking configuration.
. /etc/sysconfig/network# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"#[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/subsys/nginx#make_dirs() {
#   # make required directories
#   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
#   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
#   for opt in $options; do
#       if [ `echo $opt | grep '.*-temp-path'` ]; then
#           value=`echo $opt | cut -d "=" -f 2`
#           if [ ! -d "$value" ]; then
#               # echo "creating" $value
#               mkdir -p $value && chown -R $user $value
#           fi
#       fi
#   done
#}start() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6
#    make_dirsecho -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval
}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval
}restart() {configtest || return $?stopsleep 1start
}reload() {configtest || return $?echo -n $"Reloading $prog: "
#  -HUP是nginx平滑重启参数  killproc $nginx -HUPRETVAL=$?echo
}force_reload() {restart
}configtest() {$nginx -t -c $NGINX_CONF_FILE
}rh_status() {status $prog
}rh_status_q() {rh_status >/dev/null 2>&1
}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"exit 2
esac

Nginx的原理、常用配置和生产案例应用相关推荐

  1. Nginx负载均衡常用配置

    搭建实验环境(使用docker部署两台nginx容器) 1)使用搭建第一台nginx服务 [root@linux-node4 ~]# docker container run -d --name we ...

  2. 最全面 Nginx 入门教程 + 常用配置解析

    http://blog.csdn.net/shootyou/article/details/6093562 个人整理资料,转帖注明出处,谢谢~ Nginx介绍和安装 一个简单的配置文件 模块介绍 常用 ...

  3. Nginx配置及常用配置

    文章目录 一.基本配置及配置说明 1.1 典型配置 1.2 全局变量(nginx内置预定义变量) 二.常用配置 2.1 反向代理配置 2.2 跨域CORS配置 2.2.1 使用反向代理解决跨域 2.2 ...

  4. Nginx负载均衡的详细配置及使用案例

    Nginx负载均衡的详细配置及使用案例详解 感谢看过这一些列博文和评论的小伙伴, 我把自己所看到的学到的拿到这里来分享是想和大家一起学习进步, 想听听园友给出的意见, 也是对自己学习过程的一个总结.  ...

  5. Nginx系列1: 正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器 ...

  6. 千亿流量拦截控制处理技术-Nginx(安装 命令 路由匹配 负载均衡 常用配置)

    千亿流量拦截控制处理技术-Nginx Nginx使用与配置 1 什么是nginx 1.1 可大量并行处理 1.2 与 Apache 相比 1.2.1 Apache VS Nginx 1.2.2 常用w ...

  7. Nginx 常用配置汇总,从入门到干活足矣

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 众所周知,Nginx 是 Apache服务不错的替代品.其特点是占有内存少,并发能力强,事实上 Ngin ...

  8. Nginx 集群安装以及常用配置详解开机自启动

    Nginx 配置文件详解 main: 全局配置 event: 配置工作模式以及连接数 http: http 模块相关配置 server 虚拟主机配置,可以有多个 location 路由规则,表达式 u ...

  9. Nginx 常用配置(学习笔记三)

    #drop_sql为防爬虫.SQL注入等常用配置 user www www; worker_processes 1; error_log  /usr/local/local/logs/nginx_er ...

最新文章

  1. [elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić
  2. distinct 只针对一个字段
  3. java.lang.Math
  4. OpenFire源码学习之十九:在openfire中使用redis插件(上)
  5. 前端学习(1663):前端系列实战课程之禁止保存
  6. Linux 性能监测
  7. ios xcode文件前缀_IOS Xcode开发中 文件名的后缀名m,mm,cpp,h区别
  8. 相亲交友小程序制作方案
  9. swagger导出excel文档_excel导入导出api
  10. python数据库操作orm_python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
  11. 小米机器人虚拟墙设置_扫地机器人虚拟墙介绍及怎样设置
  12. C语言调试(Dev-C++)(初步)
  13. win10怎么放计算机在桌面,Win10我的电脑怎么放在桌面上?Win10桌面显示我的电脑方法图解...
  14. 电信卡间隔多久再办,流量卡申请间隔是多少?
  15. STM32F103单片机软件模拟IIC并读取TMP112数字温度传感器
  16. 【区块链与密码学】第9-4讲:基于PKI的群签名算法 I
  17. SAT数学考试需要准备的物品
  18. char型和long型的转换
  19. 学生用计算机的按键名称,电脑的各键名称及用途
  20. java不是有效的win32_不是有效的Win32应用程序的解决方法

热门文章

  1. iOS 开发可视化编程之Xib 简述
  2. 苹果单季营收818亿美元:Mac与iPad表现欠佳 市值跌破3万亿美元
  3. python十年后的体重_测试一下你10年后的体重
  4. C#调用CodeSoft控制两台打印机打印
  5. 使用C#实现WGS84坐标转高德的火星坐标,数据源来自excel的两列,输出到excel中
  6. 数学建模-神经网络模型
  7. Excel Sheet Column Title -- leetcode
  8. 关于 Win 10 彻底禁用自动更新
  9. 小鲨鱼记账法(Java)
  10. 5G消息应用号推荐 | 福建旅游3款应用号「数字鼓浪屿」「永定客家土楼」「海丝泉州」用起来!