在前面那些章节记录了nginx基础用法、模块等。这小节会记录nginx在配置时常常碰到的问题。

1.相同server_name多个虚拟主机优先级访问

在多个虚拟主机里面假如有多个server_name,那他们的优先级是什么?

示例

#/etc/nginx/conf.d文件夹下面文件排序方式
testserver1.conf testserver2.conf

#testserver1.conf
server{
	listen 80;
	server_name testserver1 waliblog.com;
	location {
		root /opt/app/code1;
		index index.html;
	}
}

#testserver2.conf
server{
	listen 80;
	server_name testserver2 waliblog.com;
	location {
		root /opt/app/code2
		index index.html;
	}
}

当配置多个相同server_name时,nginx是按照读取/etc/nginx/conf.d文件下面配置文件先后来决定的。所以testserver1.conf会被优先读取,会默认访问/opt/app/code1

2.location匹配优先级

匹配规则描述
=进行普通字符精确匹配,也就是完全匹配
^~表示普通字符匹配,使用前缀匹配
~ \~*表示执行一个正则匹配(),(~)不区分大小写,(~*)区分大小写

优先级是由高到低

示例

location = /code1/ {
	rewrite ^(.*)$ /code1/index.html breakl;
}

location ~ /code.* {
	rewrite ^(.*)$ /code3/index.html breakl;
}

location ^~ /code.* {
	rewrite ^(.*)$ /code2/index.html breakl;
}

nginx会优先匹配顺序第一个,第三个,第二个

3.try_files的使用

按顺序检查文件是否存在

示例1

location / {
	try_files $uri $uri/ /index.html;
}

首先会查找$uri下的这个文件,如果不存在会查找$uri/,如果还不存在就会查看/index.html文件是否存在,存在则返回,不存在就会返回404

示例2

location / {
	root /opt/app/code1/cache;
	try_files $uri @wali;
}

location @wali {
	proxy_pass http://127.0.0.1:8080;
}

浏览器输入http://walidream.com/a.html,首先会在/opt/app/code1/cache下面查找a.html文件是否存在,如果不存在就会跳到代理8080端口。常用于缓存,或动静分离。

4.alias和root区别

alias和root都是定义访问根路径。

root

location /blog/image/ {
	root /opt/app/image/;
}

当访问的路径是http://www.walidream.com/blog/image/cat.png时,实际上访问的路径是http://www.walidream.com/opt/app/image/blog/image/cat.png

alias

location /blog/image/ {
	root /opt/app/image/;
}

当访问的路径是http://www.walidream.com/blog/image/cat.png时,实际上访问的路径是http://www.walidream.com/opt/app/image/cat.png没有了/blog/image/路径。

5.如何获取用户的真实ip

ssl

当客户端访问服务器时,不是直接访问,而是经过了层层代理之后访问的服务器,我们应该如何精准的获取客户端的ip?

在一级代理时设置X_Real_Ip=$remote_addr,然后在其他代理透传下去,就可以获取用户的真实ip。

6.nginx中常见的错误码

状态码描述
301永久重定向
302临时重定向
403禁止访问
404未找到文件
413用户上传文件限制client_max_body_size
500服务器遇到错误,无法完成请求
502后台服务无响应
504后台服务执行超时

nginx教程

nginx环境搭建(1) nginx基础知识(2) nginx的安装 卸载(3) nginx的基本参数使用(4) nginx分析默认配置(5) nginx 虚拟主机配置(6) nginx 日志(7) nginx 模块(8) nginx 访问控制(9) nginx 静态资源web服务(10) nginx 缓存(11) nginx 跨域访问(12) nginx 防盗链(13) nginx 正向,反向代理配置(14) nginx 代理缓存配置(15) nginx websocket(16) nginx fastcgi(17) nginx 搭建wordPress博客(18) nginx Fastcgi缓存配置(19) nginx uwsgi反向代理(20) nginx 负载均衡(21) [深] nginx 动静分离(22) [深] nginx rewrite规则(23) [深] nginx 平滑升级 添加模块 调试(24) [深] nginx secure_link_module模块(25) [深] nginx geoip_module模块(26) [深] nginx https(27) [深] nginx与lua的开发(28) [架] nginx常见问题(29) [架] nginx性能优化(30) [架] nginx 安全(31) [架] nginx 反向代理gRpc(32)