nginx 缓存配置及报错解决

简介:

研究了2天的nginx缓存 出现各种报错

我把配置文件修改过后还是报错

1
2
3
4
5
6
7
location ~  /purge (/.*)
                 {
                 allow           127.0.0.1;
                 allow           192.168.0.0 /24 ;
                 deny            all;
                 proxy_cache_purge      cache_one  $host$1$is_args$args;
                 }
1
nginx: [emerg] unknown directive  "proxy_cache_purge"  in  /home/data/websrv/nginx/conf/nginx .conf:75
1
nginx: [emerg] unknown directive "proxy_cache_purge

报错提示

发现模块没有安装,有的重新安装模块

1
2
3
4
5
6
安装 ngx_cache_purge-1.3. tar
wget http: //labs .frickle.com /files/ngx_cache_purge-2 .0. tar .gz
tar  -zxvf ngx_cache_purge-2.0. tar .gz
cd  /home/data/install/lnmp/nginx-1 .0.15/
查看版本
nginx -V
1
2
3
[root@ceshi nginx-1.0.15] # /home/data/websrv/nginx/sbin/nginx -V
nginx version: nginx /1 .0.15
configure arguments: --prefix= /home/data/websrv/nginx  --with-http_stub_status_module

啥配置都没 所以只能重新编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
. /configure  --user=nginx --group=nginx --add-module= /home/data/install/ngx_cache_purge-2 .0 \
  --prefix= /home/data/websrv/nginx  --with-http_stub_status_module --with-http_ssl_module
加模块
onfiguration summary
   + using system PCRE library
   + using system OpenSSL library
   + md5: using OpenSSL library
   + sha1: using OpenSSL library
   + using system zlib library
   nginx path prefix:  "/home/data/websrv/nginx"
   nginx binary  file "/home/data/websrv/nginx/sbin/nginx"
   nginx configuration prefix:  "/home/data/websrv/nginx/conf"
   nginx configuration  file "/home/data/websrv/nginx/conf/nginx.conf"
   nginx pid  file "/home/data/websrv/nginx/logs/nginx.pid"
   nginx error log  file "/home/data/websrv/nginx/logs/error.log"
   nginx http access log  file "/home/data/websrv/nginx/logs/access.log"
   nginx http client request body temporary files:  "client_body_temp"
   nginx http proxy temporary files:  "proxy_temp"
   nginx http fastcgi temporary files:  "fastcgi_temp"
   nginx http uwsgi temporary files:  "uwsgi_temp"
   nginx http scgi temporary files:  "scgi_temp"


注意这里只要make 而不要make install

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
make ,不要 make  install 会覆盖
                                                                                                                                                                                              
     -o objs /src/http/ngx_http_postpone_filter_module .o \
                 src /http/ngx_http_postpone_filter_module .c
gcc -c  -I src /core  -I src /event  -I src /event/modules  -I src /os/unix  -I objs -I src /http  -I src /http/modules  \
                 -o objs /src/http/modules/ngx_http_ssi_filter_module .o \
                 src /http/modules/ngx_http_ssi_filter_module .c
gcc -c  -I src /core  -I src /event  -I src /event/modules  -I src /os/unix  -I objs -I src /http  -I src /http/modules  \
                 -o objs /src/http/modules/ngx_http_charset_filter_module .o \
                 src /http/modules/ngx_http_charset_filter_module .c
gcc -c  -I src /core  -I src /event  -I src /event/modules  -I src /os/unix  -I objs -I src /http  -I src /http/modules  \
                 -o objs /src/http/modules/ngx_http_userid_filter_module .o \
                 src /http/modules/ngx_http_userid_filter_module .c
gcc -c  -I src /core  -I src /event  -I src /event/modules  -I src /os/unix  -I objs -I src /http  -I src /http/modules  \
                 -o objs /src/http/modules/ngx_http_autoindex_module .o \
                 src /http/modules/ngx_http_autoindex_module .c
gcc -c  -I src /core  -I src /event  -I src /event/modules  -I src /os/unix  -I objs -I src /http  -I src /http/modules  \
                 -o objs /src/http/modules/ngx_http_auth_basic_module .o \
                 src /http/modules/ngx_http_auth_basic_module .c
make [1]: Leaving directory ` /home/data/install/lnmp/nginx-1 .0.15'
make  -f objs /Makefile  manpage
make [1]: Entering directory ` /home/data/install/lnmp/nginx-1 .0.15'
sed  -e  "s|%%PREFIX%%|/home/data/websrv/nginx|"  \
                 -e  "s|%%PID_PATH%%|/home/data/websrv/nginx/logs/nginx.pid|"  \
                 -e  "s|%%CONF_PATH%%|/home/data/websrv/nginx/conf/nginx.conf|"  \
                 -e  "s|%%ERROR_LOG_PATH%%|/home/data/websrv/nginx/logs/error.log|"  \
                 man /nginx .8 > objs /nginx .8
make [1]: Leaving directory ` /home/data/install/lnmp/nginx-1 .0.15'

替换nginx二进制文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@ceshi nginx-1.0.15] # killall nginx
[root@ceshi nginx-1.0.15] # cp ./objs/nginx /home/data/websrv/nginx/sbin/
cp :是否覆盖 "/home/data/websrv/nginx/sbin/nginx" ? y
service nginx start
这次就没报错了
     location ~  /purge (/.*)
                 {
                 allow           127.0.0.1;
                 allow           192.168.0.0 /24 ;
                 deny            all;
                 proxy_cache_purge   cache_one   $host$1$is_args$args;
                 }
                 access_log      off;
         }
Starting nginx daemon: nginx
started.

正常启动nginx了

当是发现 nginx 页面是500


1
500 Internal Server Error
1
2
3
4
5
[root@ceshi nginx-1.0.15] #  ulimit -n
655360
[root@ceshi nginx-1.0.15] #  ulimit -n 65535
[root@ceshi nginx-1.0.15] # cat /proc/sys/fs/file-max
65535

解决,也可以直接改配置文件

1
2
3
4
vi  /etc/security/limits .conf
在文件末加上:
  *                soft  nofile         65535
  *                hard  nofile         65535


1
127.0.0.1 - - [06 /Nov/2013 :01:52:05 +0800]  "GET /static_gmd/images/shadow_bg.jpg HTTP/1.0"  500 0  "-"  "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"



141737561.jpg


1
服务器端会判断上次的 config 时间是否比 If-Modified-Since 晚。如果自上次 request 之后又更新了 config,那么服务器就会返回完整的内容;如果期间没有更新 config,那么服务器就没必要返回完整的内容,只需要向客户端发送一个 304 Not Modified 状态码就可以了。

154029643.jpg

154032284.jpg







这样就可以了

1
2
3
4
5
6
7
8
9
10
11
12
[root@ceshi websrv] # cd cache/
[root@ceshi cache] # ll
总用量 4
drwx------. 3 coovanftp coovanftp 4096 11月  20 01:17 b
[root@ceshi cache] # cd b/
[root@ceshi b] # ll
总用量 4
drwx------. 2 coovanftp coovanftp 4096 11月  20 01:18 9b
[root@ceshi b] # cd 9b/
[root@ceshi 9b] # ll
总用量 4
-rw-------. 1 coovanftp coovanftp 800 11月  20 01:18 beffd3cafb1fbf7c3b53aa486005b9bb


但是又发现一个问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[root@ceshi nginx] # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 2735
ESTABLISHED 6
cp         0      0 192.168.0.21:80             192.168.0.21:27544          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26458          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:27665          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26601          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:27333          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26498          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:25969          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26061          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26777          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26960          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:27391          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26568          TIME
tcp        0      0 192.168.0.21:80             192.168.0.21:26525
发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
vi  /etc/sysctl .conf
编辑文件,加入以下内容:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
                                            
然后执行  /sbin/sysctl  -p 让参数生效。
[root@ceshi nginx] # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 1
ESTABLISHED 4
[root@ceshi nginx-1.0.15] # netstat -anplt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             Stat                                                                                                                                                             e       PID /Program  name
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LIST                                                                                                                                                             EN      20565 /php-fpm .conf)
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LIST                                                                                                                                                             EN      16446 /mysqld
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LIST                                                                                                                                                             EN      25492 /nginx .conf
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LIST                                                                                                                                                             EN      1768 /sshd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LIST                                                                                                                                                             EN      1150 /master
tcp        0     52 192.168.0.21:22             192.168.0.224:51384         ESTA                                                                                                                                                             BLISHED 22344 /1
tcp        0      0 192.168.0.21:22             192.168.0.224:52369         ESTA                                                                                                                                                             BLISHED 22398 /sshd : root@no
tcp        0      0 192.168.0.21:22             192.168.0.224:61398         ESTA                                                                                                                                                             BLISHED 20420 /0
tcp        0      0 192.168.0.21:22             192.168.0.224:62132         ESTA                                                                                                                                                             BLISHED 20773 /sshd : root@no
tcp        0      0 192.168.0.21:80             192.168.0.224:53048         TIME                                                                                                                                                             _WAIT   -
tcp        0      0 :::22                       :::*                        LIST                                                                                                                                                             EN      1768 /sshd
tcp        0      0 ::1:25                      :::*                        LIST                                                                                                                                                             EN      1150 /master
drwx------. 2 coovanftp root 4096 11月 20 09:56 proxy_cache_path
drwx------. 2 coovanftp root 4096 11月 20 09:56 proxy_temp
[root@ceshi nginx] # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 1
ESTABLISHED 4
[root@ceshi cache] # ll
总用量 8
drwx------. 3 coovanftp coovanftp 4096 11月 20 11:55 a
drwx------. 3 coovanftp coovanftp 4096 11月 20 11:54 b


最后附上配置






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
user coovanftp coovanftp;
worker_processes 8;
error_log  logs /error .log  crit;
worker_rlimit_nofile 65535;
events
{
   use epoll;
   worker_connections 65535;
}
http {
     include       mime.types;
     default_type  application /octet-stream ;
     log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"' ;
     server_tokens off;
     access_log  logs /access .log  main;
     sendfile        on;
     tcp_nopush  on;
     tcp_nodelay on;
     keepalive_timeout  60;
     gzip   on;
     gzip_types       text /plain  application /x-javascript  text /css  application /xml ;
     server_names_hash_bucket_size 2048;
     client_header_buffer_size 2048k;
     large_client_header_buffers 4 2048k;
     client_max_body_size 500m;
     client_body_buffer_size 4048k;
     fastcgi_buffer_size         2048k;
     fastcgi_buffers             6 2048k;
     fastcgi_busy_buffers_size   2048k;
     fastcgi_temp_file_write_size        2048k;
     fastcgi_intercept_errors    on;
     proxy_connect_timeout 60;
     proxy_read_timeout 60;
     proxy_send_timeout 60;
     proxy_buffer_size 2048k;
     proxy_buffers 4 2048k;
     proxy_busy_buffers_size 2048k;
     #proxy_cache_valid 200 304 302 3s;
     proxy_temp_file_write_size 4096k;
     proxy_temp_path  /home/data/websrv/nginx/temp_dir ;
     proxy_cache_path  /home/data/websrv/nginx/cache  levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=10g;
#  upstream指令用于设置一组可以在proxy_pass和fastcgi_pass指令中使用的代理服务器,默认的负载均衡方式为轮询.upstream模块中的server指令用于指定后端服务器的名称和参数,服务器的名称可以是一个域名,一个ip地址,端口号或者UNIX Socket.
        #而在server{..}虚拟主机内,可以通过proxy_pass和fastcgi_pass指令设置进行反向代理的upstream服务器集群
       # proxy_set_header指令用于在向反向代理的后端WEB服务器发起请求时添加指定的header头信息
        #当后端WEB服务器上有多个基于域名的虚拟主机时,要通过添加header头信息Host,用于指定请求的域名,这样后端服务器才能识别该反向代理访问请求是由那一个虚拟主机来处理
        #使用反向代理之后,后端web服务器就不能直接$_SERVER['REMOTE_ADDR']变量来获取用户的真实ip了,通过$_SERVER['REMOTE_ADDR']获得的将是负载均衡器的ip.这时,就要通过Nginx反向代理时添加Header头信息X-Forwarded-For,让后端web服务器能够通过$_SERVER['HTTP_X_FORWARDED_FOR']获取到用户的真实ip
                                    
#nginx的proxy_cache相关指令集
     # 1.proxy_cache:该指令用于设置那个缓存区将被使用
     # 2.proxy_cache_path:该指令用于设置缓存文件的存放路径
    #示例:proxy_cache_path /web/server1 levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g
   # 该指令只能在http标签内配置,levels指定该缓存空间有两层hash目录,第一层为1个字母,第二层为2个字母;
   # keys_zone参数用来为这个缓存区起名,500m指内存缓存空间大小为500MB;inactive的1d指如果缓存数据在1天内没有被访问,将被删除;max_size的30g是指硬盘缓存空间为30GB
      #3.proxy_cache_methods:该指令用于设置缓存那些http方法,默认缓存get和head,不缓存post
      #4.proxy_cache_min_uses:该指令用于设置缓存的最小使用次数,默认为1
      #5.proxy_cache_valid:该指令用于对不同返回状态码的url设置不同的缓存时间
     upstream iis{
       server  192.168.0.21;
       }
server {
     listen       80;
     server_name  192.168.0.21;
     location / {
         index  index.php index.html;
         proxy_pass http: //iis ;
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_next_upstream http_502 http_504 error timeout invalid_header;
         proxy_cache cache_one;
         proxy_cache_valid 200 5m;
         proxy_cache_valid 304 5m;
         proxy_cache_valid 301 302 1h;
         proxy_cache_valid any 5m;
         proxy_cache_key http: // $host$uri$is_args$args;
     }
     error_page   500 502 503 504   /50x .html;
     location =  /50x .html {
         root    /usr/share/nginx/html ;
     }
}
}
本文转自 cs312779641 51CTO博客,原文链接:http://blog.51cto.com/chenhao6/1329106
相关文章
|
9月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
903 87
|
5月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
543 1
|
9月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。
|
4月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
4月前
|
缓存 并行计算 监控
vLLM 性能优化实战:批处理、量化与缓存配置方案
本文深入解析vLLM高性能部署实践,揭秘如何通过continuous batching、PagedAttention与前缀缓存提升吞吐;详解批处理、量化、并发参数调优,助力实现高TPS与低延迟平衡,真正发挥vLLM生产级潜力。
1055 0
vLLM 性能优化实战:批处理、量化与缓存配置方案
|
5月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
356 18
|
5月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
540 17
|
5月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
988 5
|
6月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
7月前
|
应用服务中间件 网络安全 nginx
配置Nginx以支持Websocket连接的方法。
通过上述配置,Nginx将能够理解WebSocket协议的特殊要求,代理Websocket流量到合适的后端服务器。注意,Websocket并不是HTTP,尽管它最初是通过HTTP请求启动的连接升级,因此保证Nginx了解并能够妥善处理这种升级流程是关键。
1706 10