4. Nginx(Proxy)配置

最后更新于:2022-04-02 07:46:54

### Proxy配置 需创建扩展配置目录 ```shell mkdir -p /usr/local/nginx/conf/extra ``` #### 主配置文件 nginx.conf ```shell user nginx nginx; # 设置所有worker进程可以打开的最大文件句柄数 worker_rlimit_nofile 65535; worker_processes auto; worker_cpu_affinity auto; events { # 让多个worker进程轮询相应新请求 accept_mutex on; # 限制每个worker进程的并发连接数 worker_connections 10240; use epoll; } http { include mime.types; default_type application/octet-stream; # 开启高效文件传输模式 sendfile on; tcp_nodelay on; tcp_nopush on; # 设置客户端连接保持会话的超时时间 keepalive_timeout 10; # 设置客户端请求头读取超时时间 client_header_timeout 15; # 设置客户端请求主体读取超时时间 client_body_timeout 15; # 指定响应客户端的超时时间 send_timeout 15; # 设置最大的容许的客户端请求主体大小 client_max_body_size 10M; # 将http请求响应头里的nginx版本号信息隐藏 server_tokens off; # 开启压缩 gzip on; # 设置容许压缩的页面最小字节数 gzip_min_length 1k; # 申请4个单位为32K的内存作为压缩结果流缓存 gzip_buffers 4 32k; # 压缩的版本 gzip_http_version 1.1; # 由于IE6对Gzip压缩效果不好,建议在IE6的环境下关闭压缩功能 gzip_disable "MSIE[1-6]"; # 压缩比率 gzip_comp_level 3; # 指定压缩的类型 gzip_types text/plain text/css text/xml application/javascript application/x-javascript; # 设置从web服务器传给缓存服务器的时候不被解压。只有传送到用户后才解压缩 gzip_vary on; # 设置为Json格式,方便ELK日志分析软件处理 log_format json_main '{"@timestamp":"$time_iso8601",' '"remote_addr":"$server_addr",' '"remote_user":"$remote_user",' '"request_time":"$request_time",' '"request":"$request",' '"body_bytes_sent":"$body_bytes_sent",' '"request_method":"$request_method",' '"upstream_response_time":"$upstream_response_time",' '"upstream_addr":"$upstream_addr",' '"url":"$uri",' '"http_x_forwarded_for":"$http_x_forwarded_for",' '"http_referrer":"$http_referer",' '"status":"$status"}'; access_log logs/access.log json_main; error_log logs/error.log error; includr extra/*.conf; upstream static_pool { server 192.168.254.204:8000 weight=5 max_fails=2 fail_timeout=3; server 192.168.254.205:8000 weight=5 max_fails=2 fail_timeout=3; } upstream dynamic_pool { server 192.168.254.206:8080 weight=5 max_fails=2 fail_timeout=3; server 192.168.254.207:8080 weight=5 max_fails=2 fail_timeout=3; least_conn; } } ``` #### 扩展配置 www.conf ```shell location / { proxy_pass http://static_pool/; } location ^~ /dynamic/ { proxy_pass http://dynamic_pool/; } # 设置防盗链(注意,跳转链接使用其他域名) location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { proxy_pass http://static_pool; valid_referers none blocked *.test.com; if ($invalid_referer) { rewrite ^/ http://www.unionsmart.cn/images/nolink.jpg; } } # 限制请求方法 if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; } # 定义错误页面 error_page 400 403 404 405 408 410 411 412 413 414 415 http://www.noteshare.cn/www/40x.html; # 定义错误页面 error_page 500 502 503 504 http://www.noteshare.cn/www/50x.html; # 定义访问日志 access_log logs/proxy_access.log json_main; } ``` #### 扩展配置 proxy.conf ```shell # 当后端web服务器上也配置多个虚拟主机时,需要用该header来区分反向代理哪个主机名。 proxy_set_header Host $host; # 通过$remote_addr变量获取前端客户真实IP地址。 proxy_set_header X-Real-IP $remote_addr; # 通过$remote_addr变量获取前端客户真实IP地址。 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置缓冲区 proxy_buffering on; # 设置后端服务器的响应头大小,是响应头的缓冲区。 proxy_buffer_size 4k; # 设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息会放置到缓冲区。 proxy_buffers 8 32k; #此设置表示nginx会在没有完全读完后端响应的时候就开始向客户端传送数据,所以它会划出一部分缓冲区来专门向客户端传送数据。建议为proxy_buffers中单个缓冲区大小的2倍) proxy_busy_buffers_size 64K; # 指定当响应内容大于proxy_buffers指定的缓冲区时, 写入硬盘的临时文件的大小。 proxy_max_temp_file_size 1024m; # 一次访问能写入的临时文件的大小,默认是proxy_buffer_size和proxy_buffers中设置的缓冲区大小的2倍。 proxy_temp_file_write_size 128k; # proxy_request_buffering on; # proxy_ignore_headers Set-Cookie; # 表示与后端服务器连接的超时时间 proxy_connect_timeout 60s; # 表示后端服务器的数据回传时间 proxy_send_timeout 300; # 设置nginx从代理的后端服务器获取信息的时间 proxy_read_timeout 300s; ```
';