Nginx笔记之用户配置

date: 2017.04.14; modification:2018.06.20

目录:

1 Nginx配置

1.1 负载均衡

upstream loadbl {
    #ip_hash;
    server 192.168.11.22:8081 weight=1;
    server 192.168.33.44:8082 weight=1;
}

server {
    listen       8081;
    server_name  localhost;

    location / {
        proxy_pass http://loadbl;
    }
}

1.2 重定向

rewrite 相关指令:

一些可用的全局变量有, 可以用做条件判断

下面几种方法当匹配时会立即终止其他location的尝试

例子:

// 如果UA包含"MSIE",rewrite 请求到/msie目录下:
if ( $http_user_agent ~ MSIE ) { rewrite ^ (. * )$ /msie / $1 break; }

// 如果cookie匹配正则,设置变量$id等于正则引用部分:
if ( $http_cookie ~ * "id=([^;] +)(?:;|$)" ) { set $id $1;}

// 如果提交方法为POST,则返回状态405 (Method not allowed):
if ( $request_method = POST ) { return 405; }

// 如果请求文件名不存在,则反向代理localhost:
if ( !-f $request_filename ) { break; proxy_pass http://127.0.0.1; }

// 如果query string中包含"post=140″,永久重定向到example.com:
if ( $args ~ post=140 ) { rewrite ^ http: //example.com / permanent;}

// 匹配几种媒体文件:
~ * \. (gif |jpg |jpeg )$

Nginx的 Rewrite Flags:

2 模块配置

2.1 sticky

模块官方文档:

2.2 GeoIP

配置:

geoip_country       GeoIP.dat;
geoip_city          GeoLiteCity.dat;


geoip_proxy address | CIDR;
默认值: -
上下文: http
这个指令出现在版本 1.3.0 和 1.2.1.
定义可信地址.  如果请求来自可信地址, nginx将使用其"X-Forwarded-For"头来获得地址.

geoip_proxy_recursive on | off;
默认值: 
geoip_proxy_recursive off;
上下文: http

GeoIP 中跟国家相关的变量:

$geoip_country_code # 两位字符的英文国家码. 如: CN, US $geoip_country_code3 # 三位字符的英文国家码. 如: CHN, USA $geoip_country_name # 国家英文全称. 如: China, United States

GeoIP 中跟国家下级区域相关的变量:

$geoip_city_country_code # 也是两位字符的英文国家码. $geoip_city_country_code3 # 上同 $geoip_city_country_name # 上同. $geoip_region # 这个经测试是两位数的数字, 如杭州是02, 上海是 23. $geoip_city # 城市的英文名称. 如: Hangzhou $geoip_postal_code # 城市的邮政编码. 经测试, 国内这字段为空 $geoip_city_continent_code # 不知什么用途, 国内好像都是AS $geoip_latitude # 纬度 $geoip_longitude # 经度

2.3 ssl(https)

编译ssl:

首先nginx -V (注意大写) 查看是否编译了ssl模块. 如果没有, 则需要在 configure 时添加:

./configure --with-http_ssl_module
make
sudo make install

再次运行nginx -V, 如果有类似如下信息则表示成功:

nginx version: nginx/1.12.2
...
built with OpenSSL 1.0.2g  1 Mar 2016
TLS SNI support enabled
configure arguments: --with-http_ssl_module

配置调度服务:

server {
    listen 7999 default ssl;

    # 指定证书
    ssl_certificate ssl/certificate.pem;
    # 指定私钥
    ssl_certificate_key ssl/privatekey.pem;

    server_name io.mysocket.com;
    location / {
        ...
    }
}