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