Update avaliable. Click RELOAD to update.
目录

Nginx常用配置汇总

1. 反向代理简要配置

1.1. HTTP方式的代理转发配置

server {
    listen       80;
    server_name  www.example.cn;

    location / {
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass //192.168.1.199:8080;
    }
}

1.2 HTTPS方式的代理转发配置

server {
    listen       443;
    server_name  www.example.com;

    ssl on;
    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    ssl_session_timeout 5m;

    location / {
        proxy_set_header Host $host:443;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass https://192.168.1.197:8443;
    }
}

2. 正向HTTP代理使用

背景:子网中存在两台服务器AB,服务器A可以连接到互联网,服务器B不能上网,服务器B需要使用服务器A中的nginx正向代理功能使其连接到互联网上。

2.1 配置正向代理

server {
    resolver 8.8.8.8;
    resolver_timeout 5s;

    listen 0.0.0.0:8080;

    location / {
        proxy_pass $scheme://$host$request_uri;
        proxy_set_header Host $http_host;

        proxy_buffers 256 4k;
        proxy_max_temp_file_size 0;

        proxy_connect_timeout 30;

        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
    }
}

2.2 客户端使用正向代理

全局HTTP代理

# 添加全局HTTP代理
export http_proxy="//10.132.10.116:8080"

# 删除全局HTTP代理
unset http_proxy

yum使用代理

# 编辑yum.conf文件
vim /etc/yum.conf

# 底部添加
proxy = //10.132.10.116:8080

据网络上文章所说,nginx的正向代理不支持HTTPS的方式

3. HTTPS证书生成

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

4. 代理缓存配置

4.1 创建缓存目录并授与权限

mkdir -p /usr/local/nginx/temp
chmod -R 755 /usr/local/nginx/temp

缓存目录的创建位置可以随意,但必须具有读写权限

4.2 利用缓存目录配置代理缓存

http {
    # levels=1:2 配置缓存空间有两层hash目录
    # keys_zone=cache_zone:50m 配置缓存的名称及缓存空间大小
    # inactive 设置缓存有效期,1d表示在1天时间内没有被访问则自动删除
    # max_size 硬盘缓存的最大大小
    proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=cache_one:50m inactive=1d max_size=10g;
    server {
        listen       80;
        server_name  www.testcache123.com;

        location / {
            proxy_cache cache_one; # 指定上面配置的缓存名称
            proxy_cache_valid 200 302 1h; # 200和302请求缓存1小时
            proxy_cache_valid 301 1d; # 301请求缓存1天
            proxy_cache_key $host$uri$is_args$args; # 缓存请求匹配的key
            expires 30d;

            proxy_set_header Host $host:80;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass //www.wangjunneil.com;
        }
    }
}

5. 跨域请求配置

5.1 跨域消息头说明

名称含义
Access-Control-Allow-Origin授权那些地址或者域名可以访问
Access-Control-Allow-Credentials是否响应与该请求可以暴露
Access-Control-Allow-Methods指定运行请求的HTTP方法

5.2 具体配置明细

在nginx中,若设置在http段内则对所有server都启用,设置在server段内则只对该server启用,设置在location段内则对该请求启用。

server {
    listen       80;
    server_name  vinny.cc;

    location / {
        # 跨域请求头
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers true;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass //localhost:8080;
        client_max_body_size    1000m;
    }
}

6. 负载均衡配置

6.1 简单的权重示例

upstream backend {
    server  192.168.1.197:80 backup;
    server  192.168.1.196:80 weight=1;
    server  192.168.1.197:80 weight=3;
    # ip_hash;
}

server {
    location / {
        proxy_pass //backend;
    }
}

Nginx自带的负载均衡策略有轮询(默认),权重和ip_hash,第三方的有fair和url_hash等配置方式。

6.2 负载参数说明

名称含义
down表示当前server不参与负载
weight默认为1,weight越大,负载的权重就越大,分发到的请求就越多
max_fails允许请求失败的次数,默认为1,当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeoutmax_fails多少次失败后,暂停请求的时间
backup其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
版权所有,本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可。转载请注明出处:https://www.wangjun.dev//2017/03/nginx-general-config/