为什么要用server_name
当我们通过hosts文件指定IP与域名的对应关系(如:10.10.124.120 www.myweb.com)之后,对域名的访问会映射成对应的IP。这个ip就是nginx的公网IP 。然后server name 为虚拟服务器的识别路径。因此不同的域名会转发到对应的应用服务器中去。
结论
1、完全匹配
demo.com2、通配符在前的,如*.org3、在后的,如demo.*4、正则匹配,如~^(.+)?\.demo.com如果都不匹配 1、优先选择listen配置项后有default或default_server的 2、找到匹配listen端口的第一个server块
测试案例
安装依赖的模块
apt install libnginx-mod-http-lua
hosts文件添加映射
127.0.0.1 demo.com127.0.0.1 www.demo.com127.0.0.1 demo.org127.0.0.1 xyz.demo.com127.0.0.1 demo.xyz
配置
nginx文件
server {listen 80;server_name demo.com;location / {default_type text/html;content_by_lua 'ngx.say("完全匹配")';}}server {listen 80;server_name ~^(.+)?\.demo.org;location / {default_type text/html;content_by_lua 'ngx.say("正则匹配org")';}}server {listen 80;server_name *.org;location / {default_type text/html;content_by_lua 'ngx.say("通配符*匹配在前面")';}}server {listen 80;server_name demo.*;location / {default_type text/html;content_by_lua 'ngx.say("通配符*匹配在后面")';}}server {listen 80;server_name ~^(.+)?\.demo.com;location / {default_type text/html;content_by_lua 'ngx.say("正则匹配com")';}}
访问测试
# curl demo.com完全匹配# curl www.demo.com正则匹配com# curl demo.org通配符*匹配在前面# curl xyz.demo.com正则匹配com# curl demo.xyz通配符*匹配在后面
nginx热更新
下载新版nginx编译
wget http://nginx.org/download/nginx-1.20.1.tar.gztar xf nginx-1.20.1.tar.gzcd nginx-1.20.1./configure --prefix=/usr/local/nginx-1.20.1make
备份之前的nginx
# 示例cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old# 将新make生成的nginx 拷贝过来覆盖cp /usr/local/nginx-1.20.1/sbin/nginx /usr/local/nginx/sbin/nginx
发送信号给之前的进程,通知热部署
kill -USR2 ${NGX_PID} # master进程# 之后 nginx 会重新起一个master进程,使用的是新版本的nginx# 使用 ps -ef |grep nginx 会看到两个 master进程# 再次给老的进程发送优雅关闭进程的信号kill -WINCH ${NGX_PID}# 此时老的worker进程已经没有了,master进程仍然在,新请求都切换到新的master进程去了# master 未关闭的原因是可以通过 -s reload 重新将 worker拉起来,防止新的版本nginx有问题,用于回退
静态文件服务器
gzip on; 开启文件传输压缩,提高传输效率 gzip_min_length 1000; 低于1000则不压缩 gzip_comp_level 2; 压缩级别 gzip_types ; 压缩类型 charset utf-8; 设置防止中文乱码 alias net/; nginx工作目录下net目录作为根目录 autoindex on; 打开索引,不添加则会报403错误,因为示例中没有index,
gzip on;gzip_min_length 1000;gzip_comp_level 2;gzip_types text/plain application/xml text/css image/jpeg;server {listen 8080;server_name net.cortex.com;charset utf-8;location / {alias net/;autoindex on;}}
location 测试
测试环境
- docker
- nginx镜像
启动命令
docker run -d --name nginx-demo nginx:latestdocker exec -it nginx-demo /bin/bash
添加配置文件
- merge_slashes 默认on,自动合并多个’/‘为一个,一般在url中有base64编码时,才需要设置off
前缀字符串
- 常规
- = 精确匹配
- ^~ 匹配上后则不再进行正则表达式匹配
- ~ 大小写敏感的正则匹配
-
配置文件
/etc/nginx/conf.d/location.conf```nginx server {
server_name www.cortex.com; default_type text/plain; merge_slashes off;
location ~ /Test1/$ { return 200 ‘match Test1 with doll end!\n’; }
location ~* /Test1/$ { return 200 ‘match ignore case Test1 with doll end!\n’; }
location /Test1 { return 200 ‘prefix string match!\n’; }
location ^~ /Test1/ { return 200 ‘no regular expressions match!\n’; }
}
<a name="Ucvyz"></a>#### nginx限制上传和下载文件大小```bash上传大小限制client_max_body_size 5000m;下载大小限制proxy_max_temp_file_size 5000m;
