分类: 服务器与代理 发表时间: 2019年09月04日

标题: Nginx常用配置整理

摘要: nginx常用配置:静态资源缓存、静态资源匹配、SSL配置、安全配置、常用配置参数等

Nginx常用配置整理

反向代理

使用nginx对fpm、tomcat等服务进行反向代理时通常使用proxy_pass进行请求转发,配置示例:

  1. {
  2. location / {
  3. proxy_pass 127.0.0.1:9000; # 使用tcp协议转发
  4. proxy_pass http://127.0.0.1:8080; # 使用http协议转发
  5. proxy_pass unix:/var/run/xxx.sock # 使用sock文件转发
  6. proxy_set_header Host $host; # 保留代理之前的host
  7. proxy_set_header X-Real-IP $remote_addr; # 保留代理之前的真实客户端ip
  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  9. proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr; # 在多级代理的情况下,记录每次代理之前的客户端真实ip
  10. }
  11. }

设置反向代理时常用的配置参数:

  • client_max_body_size 1000m; # 最大长传内容大小
  • proxy_connect_timeout 30; # 连接后端服务超时时间,可以配置在http/server/location,单位:s
  • proxy_send_timeout 60; # 向后端发送数据超时时间,可以配置在http/server/location,单位:s
  • proxy_read_timeout 90; # 从后端读取返回数据超时时间,可以配置在http/server/location,单位:s

负载均衡

可以通过upstream命令来配置一组需要负载均衡的服务器

  1. upstream servers {
  2. server 172.18.0.2:8080;
  3. server 172.18.0.3:8080;
  4. server 172.18.0.4:8080;
  5. }

默认的负载均衡策略为轮询,其配置的每个服务器的分配权重相等,如果要为不通的服务器配置不同的权重,可以指定weight参数

  1. upstream servers {
  2. server 172.18.0.2:8080 weight=2;
  3. server 172.18.0.3:8080 weight=6;
  4. server 172.18.0.4:8080;
  5. }

同时可以配置最大失败次数以及等待时长

  1. upstream servers {
  2. server 172.18.0.2:8080 weight=2 max_fails=10 fail_timeout=15;
  3. server 172.18.0.3:8080 weight=6;
  4. server 172.18.0.4:8080 max_fails=2 fail_timeout=10;
  5. }

安全配置

隐藏Nginx版本号

将nginx的http块配置中的server_tokens off;配置项打开,该项默认是注释的,如果没有可以手动添加,http块配置通常是在路径/etc/nginx/nginx.conf

限制ip访问

在nginx的server配置块中,可以通过allowdeny来限制ip的访问,配置示例:

  1. server {
  2. location / {
  3. allow 123.456.789.123;
  4. allow 172.18.0.1/24;
  5. deny all;
  6. }
  7. }

公共配置参数

日志配置

  1. http {
  2. log_format logstash '$remote_addr - $remote_user [$time_local] "$host" "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
  3. }

server中可以通过access_log来配置日志

  1. server {
  2. access_log /path/to/log.log logstash;
  3. /* 省略一些配置 */
  4. }

内置变量

  • $content_length 请求头中的Content Length
  • $content_type 请求头中的Content Type
  • $document_root 当前请求的文档根目录
  • $document_uri/$uri 当前请求的uri,不包含host,也不包含$query_string
  • $hostname 主机名
  • $host 优先级如下:HTTP请求行的主机名>”HOST”请求头字段>符合请求的服务器名
  • $query_string 请求查询字符串,?后边的部分
  • $remote_addr 远程ip
  • $remote_port 远程端口
  • $request_body 请求body体
  • $request_uri 不包含host的完整uri,包含$query_string,只读变量