Ngx基操
常规配置模板
#user www www;
worker_processes auto;
error_log /home/wwwlogs/nginx_error.log crit;
#pid /usr/local/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 655350;
events
{
use epoll;
worker_connections 655350;
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m;
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/xml application/json;
gzip_vary on;
log_format access '$remote_addr - $remote_user [$time_local] $host '
'"$request" $status $body_bytes_sent $request_time '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for"'
'$upstream_addr $upstream_status $upstream_response_time' ;
#设置Web缓存区名称为cache_one,内存缓存空间大小为256MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
proxy_temp_path /home/proxy_temp_dir;
proxy_cache_path /home/proxy_cache_path levels=1:2 keys_zone=cache_one:256m inactive=1d max_size=30g;
server {
listen 80;
server_name _;
return 403;
}
include vhost/*.conf;
}以“exmaple.org”为例,如下为基于upstream负载均衡模式的配置:
其他的proxy配置:
用户认证
解决跨域
URL重写
比如说访问某站点的路径为/forum/ , 此时想使用/bbs来访问此站点需要做url重写如下
比如说某站点有个图片服务器(10.0.0.1/p_w_picpaths/ ) 此时访问某站点上/p_w_picpaths/的资源时希望访问到图片服务器上的资源
域名跳转
域名镜像
## 判断表达式
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行
防盗链
会话保持
ip_hash
sticky_cookie_insert
expires:设置浏览器中保持cookie的时间 domain:定义cookie的域 path:为cookie定义路径
动静分离
为加快网站解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 在动静分离的tomcat的时候比较明显,因为tomcat解析静态很慢,简单来说,是使用正则表达式匹配过滤,交给不同的服务器。
1、准备环境
2、配置nginx反向代理upstream
3、192.168.62.155 静态资源
4、192.168.62.157 动态资源
日志切割
方法一:
方法二:
方法三:
方法四:
location优先级
HTTPS 使用自颁发证书实现
基于HTTPS配置核心配置
根据页面不存在则自定义跳转
根据文件类型设置过期时间
根据域名自定义跳转
手机|PC端,作出相应的跳转
禁止访问目录|文件
如果前端是反向代理的情况下:
添加模块--支持Websock模块
Nginx动态添加模块
版本平滑升级,和添加模块操作类似
准备模块
这里以 nginx-push-stream-module 为例,模块我放在 /data/module 下,你也可以放在其他位置
查看Nginx已安装模块
备份源执行文件
备份原来的 nginx 可执行文件
下载源码编译
下载相同版本的Nginx源码包编译(以前安装时的源码包),如果已经删除了可重新下载,版本相同即可
查看是否安装
添加模块--支持健康检查模块
缺陷?
自带健康检查的缺陷:
Nginx只有当有访问时后,才发起对后端节点探测。
如果本次请求中,节点正好出现故障,Nginx依然将请求转交给故障的节点,然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。但是会影响效率,因为多了一次转发
自带模块无法做到预警
被动健康检查
使用第三访模块nginx_upstream_check_module:
区别于nginx自带的非主动式的心跳检测,淘宝开发的tengine自带了一个提供主动式后端服务器心跳检测模块
若健康检查包类型为http,在开启健康检查功能后,nginx会根据设置的间隔向指定的后端服务器端口发送健康检查包,并根据期望的HTTP回复状态码来判断服务是否健康。
后端真实节点不可用,则请求不会转发到故障节点
故障节点恢复后,请求正常转发
准备模块
打补丁
重新编译
查看模块
如何使用?
验证
注意事项
如果后端是基于域名访问,可使用check_http_send "GET /xxx HTTP/1.0\r\n HOST www.xxx.com\r\n\r\n";方式在请求时添加请求头信息
参数详解
interval: 检测间隔3秒
fall: 连续检测失败次数5次时,认定relaserver is down
rise: 连续检测成功2次时,认定relaserver is up
timeout: 超时1秒
default_down: 初始状态为down,只有检测通过后才为up
type: 检测类型方式 tcp
tcp :tcp 套接字,不建议使用,后端业务未100%启动完成,前端已经放开访问的情况
ssl_hello: 发送hello报文并接收relaserver 返回的hello报文
http: 自定义发送一个请求,判断上游relaserver 接收并处理
mysql: 连接到mysql服务器,判断上游relaserver是否还存在
ajp: 发送AJP Cping数据包,接收并解析AJP Cpong响应以诊断上游relaserver是否还存活(AJP tomcat内置的一种协议)
fastcgi: php程序是否存活
GIthub 地址
https://github.com/yaoweibin/nginx_upstream_check_module
添加模块-支持国家城市模块
安装依赖 libmaxminddb
因为需要读取在GeoIP2的IP数据库库,需要使用到libmaxminddb中的一个C库
下载GeoIP源码
Nginx重新编译
下载GeoLite
这个库是为了将IP地址翻译成具体的地址信息,下载需要注册... URL: https://www.maxmind.com/en/accounts/current/people/current 账号: xxxx@qq.com 密码: xxx..
启用 GeoIP
检查 GeoIP
内置变量
Last updated