Nginx常用配置

本文介绍了Nginx的常用命令,如验证配置文件的“nginx -t”和实现平滑重启的“nginx -s reload”。还阐述了常用配置,包括设置代理、gzip压缩、location配置及跨域配置等,分析了gzip不生效原因,讲解了location各参数作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令

nginx -t

进入nginx安装目录sbin下,输入命令./nginx -t
作用:
1、验证nginx配置文件是否正确
2、查看配置文件 nginx.conf 路径

nginx -s reload

作用:平滑重启(服务不会中断)

常用配置

1、设置代理

location / {
                # add_header access-control-allow-origin *;
        		proxy_pass          http://IP地址:端口号;
        		proxy_set_header    X-Forwarded-Host $host:$server_port;
        		proxy_set_header    X-Real-IP        $remote_addr;
        		proxy_set_header    Origin           $host:$server_port;
        		proxy_set_header    Referer          $host:$server_port;
        }

2、gzip

参考:
nginx中如何设置gzip(总结)
nginx下gzip配置参数详解

2.1、gzip压缩提升网站速度,常用的gzip配置

Nginx自带的有gzip模块 http://wiki.nginx.org/NginxChsHttpGzipModule ,这个模块支持在线实时压缩输出数据流。经过良好的配置优化,可以大幅的提升网站的输出效率。

	#是否开启gzip压缩
    gzip on|off; 
    #http的协议版本
    # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
    gzip_http_version 1.0|1.1;
    #IE版本1-6不支持gzip压缩,关闭
    gzip_disable 'MSIE[1-6].';
    # 进行压缩的文件类型。javascript有多种形式。其中的值可以在浏览器请求报文 content-type 中查看
    gzip_types text/css text/javascript application/javascript image/jpeg image/png image/gif;
    #设置压缩缓冲区大小,压缩在内存中缓冲几块? 每块多大?,此处设置为4个8K内存作为压缩结果流缓存
    gzip_buffers 4 16k;
    #启用gzip压缩的最小文件,小于设置值的文件将不会压缩
    gzip_min_length 1k;
    #gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
    gzip_comp_level 9;
    #给响应头加个vary,告知客户端能否缓存
    gzip_vary on|off;
    #反向代理时使用,Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
    gzip_proxied any;

2.2 、什么样的资源不适合开启gzip压缩

二进制资源:例如图片/mp3这样的二进制文件,不必压缩;因为压缩率比较小, 比如100->80字节,而且压缩也是耗费CPU资源的.

2.3 、如何解决:公司的静态资源服务器全部使用的Nginx,且都开启了gzip压缩。内部测试是完全正常的,然而一到外网,居然没有做gzip! ?

原因:做负载均衡的机器上面没开gzip:在应用服务器前,公司还有一层Nginx的集群作为七层负责均衡,在这一层上,是没有开启gzip的。
还需要设置gzip_http_version为1.0:nginx和后端的upstream server之间默认是用HTTP/1.0协议通信。

3、nginx location配置

参考:
nginx location配置

3.1、匹配模式

location路由匹配的大致规则:location [=|^~|~|~*|@] path { ... }

location = /uri    =开头表示精确匹配,只有完全匹配上才能生效。
location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location ^~ /uri   ^~ 开头对URL路径进行前缀匹配,只要匹配到该前缀就可以生效,并且在正则之前。
location ~ /uri     ~开头表示区分大小写的正则匹配。
location ~* /uri    ~*开头表示不区分大小写的正则匹配。
location /       通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。

优先级从前往后依次递减:精确匹配(=)、前缀匹配(^~)、正则匹配(~和~*)、通配符路径

3.2、root 、 alias

root指向的文件实际路径:root+location
alias指向的文件实际路径:alias

server {
  listen 2020;
  
  location /test {
    root /data;
  }
}
# 指向的文件路径为/data/test
server {
  listen 2020;
  
  location /test {
    alias /data;
  }
}
# 最终指向的文件路径为/data

定义位置区别:

  • root可以在http、server、location、if中定义内容
  • alias只能在location中定义

root在http、server定义以后,location会默认继承上层定义的内容,可以在location中使用root对上层root定义进行重写,或者使用alias让上层root在该lcation中失效。

3.3、try_files

语法: try_files file … uri 或 try_files file … = code
作用域:server,location

try_files按配置顺序检查文件是否存在,返回第一个找到的文件。结尾的斜线表示为文件夹 -$uri/。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数。

只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。 最后一个参数是回退URI且必须存在,否则将会出现内部500错误。

server {
    root /www/data;
 
    location /images/ {
        # 判断原始的uri文件是否存在,如果不存在返回/www/data/images/default.gif
        try_files $uri /images/default.gif; 
        # 判断uri是否带有文件名或者目录名,如果没有返回404页面
         try_files $uri $uri/ $uri.html =404;
    }
}

3.4、proxy_pass

该参数用作反向代理,可以用来做负载均衡、前端解决跨域等功能。使用结构proxy_pass url

server {
  listen 2020;
  
  location /api/ {
    proxy_pass http://localhost:7001;
    # 最后不加/
    # localhost:2020/api/component/list => http://locahost:7001/api/component/list
    # 最后加/
    # localhost:2020/api/component/list => http://locahost:7001/component/list
  }
}

3.6、rewrite

rewrite参数用来将客户端请求重定向到一个新的地址。使用格式rewrite regex replacement [flag];

  • regex(必填):正则匹配,只有正则匹配成功后,才能进行地址修改等后续步骤
  • replacement(必填):新的url(以http:// https:// $schema等开头)或者uri,正则匹配成功后会用这个值替换原来的请求地址。当replacement值是url时,客户端请求发生重定向,因此会有两次请求,第一次请求是客户端原请求,响应的状态码为302,第二次请求的地址就是replacement值,本次rewrite逻辑运行完成以后,后续的rewrite不再匹配;当replacement值为uri时,客户端请求可能发生重定向,是否发生重定向与flag参数有关
  • flag(可选)
    break:本条rewrite逻辑运行完成以后,后续的rewrite不再匹配
    last:本条rewrite逻辑运行完成以后,后续的rewrite不再匹配,重新开始location路由匹配
    permanent:永久重定向,301
    redirect:临时重定向,302

如果想要深入学习搞明白rewrite,请参考 搞懂nginx的rewrite模块location rewrite配置

3.5、index

index用于指定网站的起始页面,默认值index index.html;

index参数只是用来指定文件的路径,nginx根据index参数查找文件是否存在,如果存在就用文件路径拼接成新的url,nginx内部重定向到这个新的url,来获取到起始页面资源。下面用具体的例子来进行说明(/data/test目录下有一个index.html文件):

server {
  listen 2020;
  
  location / {
    root /data/test;
    index index.html;
  }
}
# 请求localhost:2020,响应内容为文件/data/test/index.html内容

4、跨域配置

location / {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization';

    if ($request_method = 'OPTIONS') {
        return 204;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值