nginx配置conf文件URL匹配

本文详细介绍Nginx的配置技巧,包括静态资源缓存、负载均衡、防盗链设置、日志管理、PHP支持配置及与Tomcat的配合使用。此外,还提供了Nginx编译优化和系统内核参数调优的方法。

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

1 扩展名为.jpg,.gif.jpeg等文件交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天

location ~ .*\.(gif|jpg|jpeg|png)$ {

    root /web/wwwroot/www.ixdba.net;

    expires 30d;

}


2 将upload和html下的所有文件交给nginx处理,upload和html目录包含在/web/wwwroot/www.ixdba.net下面

location ~ ^/(upload|html)/ {

    root /web/wwwroot/www.ixdba.net;

    expires 30d;

}


3 location是对此虚拟主机下动态网页的过滤处理,以下将所有.jsp为后缀的文件都交给本机的8080端口处理

location ~  .*.jsp$ {

     index index.jsp;

     proxy_pass http://localhost:8080;

}


4 检测配置文件配置是否正确

nginx/sbin/nginx -t 或者nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf

-t 用于检查配置文件是否正确,-c用于指定配置文件路径

显示nginx的版本信息 nginx/sbin/nginx -v

显示nginx的版本信息以及编译参数相关信息 nginx/sbin/nginx -V

平滑重启nginx kill -HUP `cat /opt/nginx/logs/nginx.pid`

关闭nginx kill -QUIT `cat /opt/nginx/logs/nginx.pid`

重新打开一个日志文件 kill -USR1 `cat /opt/nginx/logs/nginx.pid`

平滑升级可执行程序 kill -USR2 `cat /opt/nginx/logs/nginx.pid`


5 负载均衡示例

http {

   upstream myserver {

         server 192.168.12.181:80 weight=3 max_fails=3 fail_timeout=20s;

          server 192.168.12.182:80 weight=1 max_fails=3 fail_timeout=20s;

         server 192.168.12.183:80 weight=4 max_fails=3 fail_timeout=20s;

   }


   server {

        listen 80;

        server_name www.domain.com 192.168.12.189;

        index index.html index.htm;

        root /ixda/web/wwwroot;

 

        location / {

              proxy_pass http://myserver;

              proxy_next_upstream http_500 http_502 error timeout invalid_header;

              include /opt/nginx/conf/proxy.conf;

        }

   }

}

先定义了一个负载均衡组myserver,通过loacation部分实现负载调度,proxy_pass指令指定后端代理服务器的地址和端口

proxy_next_upstream用来定义故障转移策略,当后端节点返回500,502,503,504和执行超时等错误时,自动将请求转发到upstream负载均衡组中的另一台服务器

inluce指令包含进的proxy文件内容为

proxy_redirect off;

proxy_set_header Host $host;#由后端服务器获取用户的主机名或真实ip地址,以及代理者的真实ip

proxy_set_header X-real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

client_body_buffer_size 128k;#客户端请求body缓冲区大小,可以理解为先保存到本地,再传递给用户

proxy_connect_timeout 90;#表示与后端服务器连接的超时时间,即发起握手等候响应的超时时间

proxy_send_timeout 90;#后端服务器数据到回传时间,即在规定时间内后端服务器必须传完所有数据,否则nginx将断开这个连接

proxy_read_timeout 90;#nginx从后端的服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的响应时间,即nginx已经进入后端的排队之中等候处理的时间

proxy_buffer_size 4k;

proxy_buffer 4 32k;#缓冲区数量和大小,nginx从后端服务器获取到响应信息,会放置到缓冲区

proxy_busy_buffer_size 64k;#设置系统很忙时可以使用的proxy_bufer大小

proxy_temp_file_write_size 64k;#指定proxy缓存临时文件大小


6 防盗链设置

location ~* \.(gif|jpg|png|swf|flv|wma|asf|mp3)$ {

   valid_referers none blocked *.ixdal.net ixdal.net;

   if ($invalid_referer) {

        rewrite ^/ http://www.ixda.net/img/error.gif;

        #return 403;

   }


   location /images {

         root /opt/nginx/html;

         valid_referers none blocked *.ixdal.net ixdal.net;

         if ($invalid_referer) {

                return 403;

         }

   }

}

如果不是指定的地址格式,则跳转到rewrite指定的地址或者直接返回403错误


7 nginx日志分割

#!/bin/bash

savelog_path='/home/nginx/logs';

nglogs='/opt/nginx/logs';


mkdir -p $savelog_path/$(date +%Y)/$(date +m)

mv $nglogs/access.log $savelog_path/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log

mv $nglogs/error.log $savelog_path/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log

kill -USR1 `cat /opt/nginx/logs/nginx.pid`


8 nginx编译优化

8.1 nginx源码auto/cc/gcc文件,注释或删除掉如下两行

#debug

CFLAGS=" $CFLAGS -g"


8.2 编译参数

--with-cc-opt=' -O3'

--with-cpu-opt=CPU #CPU值为cat /proc/cpuinfo | grep "model name",如pentium,pentiumpro,pentium3,pentium4,athlon,opteron,amd64,sparcc32,sparc64,ppc64


8.2 内核参数

/etc/sysctl.conf

net.ipv4.tcp_max_tw_buckets = 6000

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_syncookies = 1

net.core.somaxconn = 262144

net.core.netdev_max_backlog = 252144

net.ipv4.tcp_max_orphans = 262144

net.ipv4.tcp_max_syn_backlog = 262144

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_fin_timeout = 1

net.ipv4.tcp_keeplive_time = 30

vm.overcommit_memory=1


/sbin/sysctl -p使参数生效

net.ipv4.tcp_max_tw_buckets 设定timewait的数量,默认是180 000

net.ipv4.tcp_local_port_range 允许系统打开的端口范围

net.ipv4.tcp_tw_recycle 设定启动timewait快速回收

net.ipv4.tcp_tw_reuse 设置开启重用,允许将TIME-WAIT sockets重新用于新的tcp连接

net.ipv4.tcp_syncookies设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理

net.core.somaxconn默认值为128,用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致连接超时或者重传,因此需要结合并发请求数来调节此值

net.core.netdev_max_backlog表示每个网络端口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目

net.ipv4.tcp_max_orphans设置系统中有多少个tcp套接字不被关联到任何一个用户文件句柄上,如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制只是为了防护简单的Dos攻击,不能过分依赖这个限制甚至人为减小这个值,更多的情况下应该增加这个值

net.ipv4.tcp_max_syn_bakclog记录那些尚未收到客户端确认信息的连接请求的最大值,对于128M内存的系统而言,此值为1024,小内存的系统则为128

net.ipv4.tcp_synack_retries内核放弃连接之前发送SYN+ACK包的数量

net.ipv4.tcp_fin_timeout套接字保持在FIN-WAIT-2状态的时间,默认值为60秒,正确设置这个值很重要,有时即使一个负载很小的web服务器,也会大量的死套接字而产生内存溢出的风险

net.ipv4.tcp_syn_retries内核在放弃连接之前发送SYN包的数量

如果发送端要求关闭套接字,net.ipv4.tcp_fin_timeout选项决定了套接字保持在FIN-WAIT-2状态的时间,接收端可以出错并永远不关闭连接,甚至意外宕机

net.ipv4.tcp_fin_timeout的默认值为60秒,需要注意,有时即使一个负载很小的web服务器,也会大量的死套接字而产生内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最大只消耗1.5KB的内存,但是其生存期长些。

net.ipv4.tcp_keepalive_time表示当keeplive启用的时候,TCP发送keeplive的频度,默认值为2(单位为小时)

vm.overcommit_memory指定内核针对内存分配的策略,可以为0,1,2

0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存


9 nginx配置支持php

server {

    inlucde port.conf;

    server_name www.ixdba.net ixdba.net;

   

     location / {

          index index.html index.php;

          root /web/www/www.ixdba.net;

     }


     location ~ \.php$ {

           root html;

           fastcgi_pass 127.0.0.1:9000;

           fastcgi_index index.php;

           fastcgi_param SCIPT_FIENAME $document_root$fastcgi_script_name;

           include fastcgi_params;

     }

}

通过咯擦提哦你指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,这里到ip地址和端口就是FastCGI进程监听的IP地址和端口

fastcgi_param指令指定放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径,这里是/root/local/nginx/html目录,建议这个目录与nginx虚拟主机指定的根目录保持一致,可以不一致

fastcgi_params文件是FastCGI进程的一个参数配置文件,在安装nginx后,会默认生成一个这样的文件,这里通过一个include指令将这个参数配置文件包含进来


FastCGI指令优化,将以下配置添加到nginx主配置文件中到Http层级

fastcgi_cache_path /usr/local/nginx/fastcgi_cache level=1:2 keys_zone=TEST:10m inactive=5m;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 64k;

fastcgi_buffers 4 64k;

fastcgi_busy_buffer_size 128k;

fastcgi_temp_file_size 128k;

fastcgi_cache TEST;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

fastcgi_cache_path为FastCGI缓存文件的路径和目录结构等级,关键字区域存储时间,以及非活动删除时间

fastcgi_connect_timeout连接到后端FastCGI的超时时间

fastcgi_send_timeout指定向FastCGI传送请求的超时时间,已经完成两次握手后向FastCGI传送请求的超时时间

fastcgi_read_timeout指定接收FastCGI应答的超时时间,已经完成两次握手后接收FastCGI应答的超时时间

fastcgi_buffer_size使用一个64KB的缓冲区读取应答的第一部分

fastcgi_buffers指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求

fastcgi_temp_file_size页面大于缓冲区缓存时,大于的部分会缓存到文件,这里指定缓存文件大小

fastcgi_cache表示开启FastCGI缓存并为其指定一个名称,开启缓存非常有用,可以有效降低cpu的负载,并且防止502错误的发生,但是开启缓存也会引起很多问题,要视情况而定

fastcgi_cache_valid用来指定应答代码的缓存时间,示例中表示将200,302应答缓存一个小时,将301应答缓存一天,其他缓存均缓存1分钟


10 nginx和tomcat搭配

server {

    listern 80;

    server_name www.ixdba.net;

    root /web/www/html;


location /img/ {

    alias /web/www/html/img;

}


location ~ (\.jsp)|(\.do)|(\.action) {

    proxy_pass http://192.168.12.130:8080;

    proxy_redirect off;

    proxy_set_header Host $host;

    proxy_set_header X-Real-IP $remode_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    client_max_body_size 10m;

    client_body_buffer_size 128k;

    proxy_connect_timeout 90;

     proxy_send_timeout 90;

     proxy_read_timeout 90;

     proxy_buffer_size 4k;

     proxy_buffers 4 32k;

     proxy_busy_buffers_size 64k;

     proxy_temp_file_write_size 64k;

}


}

负载均衡配置

upstream mytomcats {

     server 192.168.12.131:8000;

     server 192.168.12.132:8080;

     server 192.168.12.133:8090;

}


location ~ (\.jsp)|(\.do)|(\.action) {

     proxy_pass http://mytomcats;

     .....

}

注意,如果在location指令中使用正则表达式后再使用alias指令,nginx不支持










### Nginx 配置文件详解 #### 基本结构概述 Nginx配置文件通常位于 `/etc/nginx/nginx.conf` 或者 `/usr/local/nginx/conf/nginx.conf`。该文件由多个上下文(context)组成,每个上下文中包含若干指令(directive)。常见的上下文有 `http`, `server`, 和 `location`。 - **全局块**:这是最外层的配置项,在任何 context 之外定义。这些设置适用于整个 Nginx 实例。 - **events 块**:用于设定 Nginx 工作模式以及连接数上限等参数[^1]。 ```nginx events { worker_connections 1024; } ``` - **http 块**:包含了大多数与 HTTP 协议相关的配置选项。此部分可进一步细分为 server 和 location 上下文。 #### Server Block 解析 Server block 定义了一个虚拟主机的服务行为,包括监听端口、域名绑定等内容: ```nginx server { listen 80; # 监听HTTP请求,默认为TCP协议第80号端口 server_name localhost; # 绑定服务名或IP地址 charset utf-8; access_log /var/log/nginx/host.access.log main; location / { # 处理根路径下的所有URL匹配 root html; # 设置网站文档根目录 index index.html index.htm; } } ``` #### Location Block 使用方法 Location blocks 是用来指定如何处理特定 URL 路径上的请求。可以通过正则表达式来实现更复杂的路由逻辑: ```nginx location ~ \.php$ { fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi_params; } ``` 上述例子展示了当访问以 .php 结尾的 URI 时,会通过 FastCGI 接口传递给 PHP-FPM 进程解析执行[^3]。 #### 反向代理与负载均衡功能介绍 除了作为静态网页服务器外,Nginx 更常被用作反向代理服务器和负载均衡器。这使得它可以有效地分发流量并提高系统的可用性和性能。 ```nginx upstream backend_servers { server backend1.example.com weight=5; server backend2.example.com; } server { ... location /service/ { proxy_pass http://backend_servers/; } } ``` 这段配置实现了基于权重算法的简单负载均衡策略,其中 `proxy_pass` 指令指定了上游服务器组名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值