nginx实现对css,js文件缓存

本文介绍了如何通过配置Nginx实现静态文件的缓存,以提升网页访问速度。通过修改nginx.conf文件,设置缓存策略,包括proxy_cache_path、proxy_cache、proxy_cache_valid等参数,可以显著减少页面加载时间,提高用户体验。同时,文章还探讨了HTTP缓存头中的Cache-Control指令,如max-age,用于控制缓存有效期。

网页访问缓慢,响应时间长,想要优化网页访问速度,可以了解一下nginx缓存

首先我们先看一下,没设置之前的效果

总计5s才加载出全部页面。下面是优化后的效果,快了3s,这速度差的有点多。

 我们在nginx实现对静态文件的缓存可以使我们服务在访问这些文件时,不需要请求服务器响应,直接访问缓存文件,达到提速的效果。

这张图是nginx的工作原理

实现方式:修改nginx.conf

user www www;

worker_processes 2; #设置值和CPU核心数一致

error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别

#access_log /usr/local/webserver/nginx/logs/access.log crit;

pid /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.

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';

   

#charset gb2312;

      

  server_names_hash_bucket_size 128;

  client_header_buffer_size 32k;

  large_client_header_buffers 4 32k;

  client_max_body_size 8m;

      

  sendfile on;

  tcp_nopush on;

  keepalive_timeout 60;

  tcp_nodelay on;

  fastcgi_connect_timeout 300;

  fastcgi_send_timeout 300;

  fastcgi_read_timeout 300;

  fastcgi_buffer_size 64k;

  fastcgi_buffers 4 64k;

  fastcgi_busy_buffers_size 128k;

  fastcgi_temp_file_write_size 128k;

  gzip on;

  gzip_min_length 1k;

  gzip_buffers 4 16k;

  gzip_http_version 1.0;

  gzip_comp_level 2;

  gzip_types text/plain application/x-javascript text/css application/xml;

  gzip_vary on;

  

  ##cache##

  proxy_buffer_size 16k;

  proxy_buffers 4 64k;

  proxy_busy_buffers_size 128k;

  proxy_temp_file_write_size 128k;

  proxy_temp_path /usr/local/webserver/nginx/temp;

  proxy_cache_path /usr/local/webserver/nginx/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;

  ##end##

  #limit_zone crawler $binary_remote_addr 10m;

 #下面是server虚拟主机的配置

    upstream web_back{ 

        server 127.0.0.1:8080; #并且可以分配权重weight,这样来配置集群服务器的访问优先权 

    }

 server

  {

    listen 8060;#监听端口

    #缓存相应的文件(静态文件) 

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

        proxy_pass http://web_back;         #如果没有缓存则通过proxy_pass转向请求 

        proxy_redirect off; 

        access_log off;# 关闭日志

        proxy_set_header Host $host; 

        proxy_cache cache_one; 

        proxy_cache_valid 200 302 24h;                              #对不同的HTTP状态码设置不同的缓存时间,h小时,d天数 

        proxy_cache_valid 301 1d; 

        proxy_cache_valid any 1m; 

        expires 30d;

        add_header wall "cache-file";

    

    #web 使用

    location /cpeducloud {

            proxy_pass http://localhost:8080/cpeducloud;

        proxy_redirect http:// https://;

        sendfile off;  

            proxy_set_header   Host             $host:$server_port;

            proxy_set_header   X-Real-IP        $remote_addr;

            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_set_header   Upgrade $http_upgrade;   

            proxy_set_header   Connection "Upgrade";

        proxy_max_temp_file_size 0;

            #this is the maximum upload size

            client_max_body_size       0;

            client_body_buffer_size    128k;

            proxy_connect_timeout      90;

            proxy_send_timeout         180;

            proxy_read_timeout         180;

            proxy_temp_file_write_size 64k;

            # Required for new HTTP-based CLI

            proxy_http_version 1.1;

            

         

    }

      location /download {

        proxy_pass http://localhost:8080/cpeducloud;

        proxy_redirect http:// https://;

         

        #下载速度限制

        #limit_rate_after 10m;

        limit_rate 5k;

    }  

     

    access_log logs/cpeducloud.log main;

    

  }

   

}

修改http和server两个模块,红色标注的是需要修改的地方,蓝色标注的可以不需要,修改之后重启nginx

看一下修改之后的效果,看页面响应头可以看出来

修改之前

 修改之后

可以看到响应头的区别,看代码状态也可以看出,资源来自内存缓存

其中max-ages=2592000的意思是,缓存保存2592000秒,也就是30天(参见下表),30天后回重新向服务器请求资源,并重新保存缓存文件。

Cache-directive

说明

public

所有内容都将被缓存(客户端和代理服务器都可缓存)

private

内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)

no-cache

必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。

no-store

所有内容都不会被缓存到缓存或 Internet 临时文件中

must-revalidation/proxy-revalidation

如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证

max-age=xxx (xxx is numeric)

缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高

参考文献:Nginx 静态资源缓存配置 - 手撕高达的村长 - 博客园 (cnblogs.com)

                Cache-control_百度百科 (baidu.com)

<think> 首先,用户的问题是关于“使用nginx配置jscss文件访问权限的方法”。我需要基于提供的引用内容来回答这个问题。引用内容是关于Nginx配置的,包括权限设置、静态资源处理等。 关键引用点: - 引用[1]:提到了更改目录所有权和权限,以确保Nginx有读取权限。 - 引用[2]:展示了location块配置静态资源。 - 引用[3]:关于日志切割,但可能不直接相关。 - 引用[4]:有安全配置,如限制请求速率,但用户问的是访问权限。 - 引用[5]:设置静态资源目录的权限。 用户的需求是配置JSCSS文件的访问权限,这可能涉及: 1. 设置访问控制,如允许或拒绝特定IP访问这些文件。 2. 设置文件权限,确保Nginx进程有权限读取这些文件。 3. 配置location块来专门处理这些文件。 在Nginx中,访问权限通常通过location块和相应的指令来控制,如`deny`、`allow`、`auth_basic`等。对于静态文件JSCSS,我们通常使用location块来匹配这些文件扩展名。 步骤: 1. **定位文件位置**:确保JSCSS文件在服务器上的存储位置正确,Nginx有读取权限。 2. **配置location块**:在Nginx配置文件中,为JSCSS文件设置特定的location块。 3. **设置访问控制**:如果需要限制访问,使用`deny`和`allow`指令。 4. **权限设置**:操作系统级别的文件权限。 从引用中提取相关信息: - 引用[1]:`sudo chown -R www-data:www-data /var/www/html`,这设置目录所有权给Nginx用户(通常是www-data或nginx)。 - 引用[2]:`location /images/ { ... }`,类似地,可以为JSCSS配置location。 - 引用[5]:确保目录存在并设置权限。 回答结构: - 清晰、逐步解释。 - 使用中文。 - 必要时添加代码块。 - 在回答末尾添加相关问题。 - 引用来源:使用[^1], [^2]等标识引用的段落。 最终回答应: 1. 解释如何设置文件权限(基于引用[1]和[5])。 2. 展示如何配置Nginx location块来处理JSCSS文件(基于引用[2])。 3. 如果需要,添加访问控制(基于引用[4],但用户没明确说限制访问)。 4. 确保语法正确。 用户的问题焦点是“访问权限”,这可能包括: - 谁可以访问这些文件(IP限制)。 - 文件是否可读(权限设置)。 - 可能包括认证。 在Nginx中,常见的权限配置: - `allow` and `deny` for IP-based access. - `auth_basic` for password authentication. - 确保文件权限正确。 示例配置: - 设置静态资源位置。 - 添加访问控制。 基于引用: - 引用[1]和[5]强调文件系统权限。 - 引用[2]展示location块。 - 引用[4]有安全配置,如限制请求。 可能步骤: 1. **确保文件系统权限**:使用类似 `chown` 和 `chmod` 命令设置目录和文件的所有权给Nginx用户。 2. **配置Nginx**:在配置文件中添加location块。 - 例如:`location ~* \.(js|css)$ { ... }` 匹配所有JSCSS文件。 - 内部可以添加访问控制指令。 如果用户想限制访问,可以添加如`deny all;`或指定IP。但用户没说具体需求,所以给出通用方法。 相关问题生成: - 如何限制特定IP访问静态资源? - 如何设置Nginx静态文件缓存? - Nginx中如何配置访问日志? 确保回答真实可靠:基于标准Nginx实践和提供的引用。 </think>### 配置NginxJSCSS文件的访问权限方法 在Nginx中配置JavaScript(JS)和CSS文件的访问权限,主要涉及两个方面:**文件系统权限设置**(确保Nginx进程有权限读取文件)和**Nginx配置文件的访问控制**(如限制IP访问或添加认证)。以下是基于最佳实践的逐步方法,结合了相关引用内容。操作前请备份Nginx配置文件(通常位于`/etc/nginx/nginx.conf`或站点配置文件如`/etc/nginx/sites-available/default`),并确保你有管理员权限。 #### 步骤1: 设置文件系统权限(确保Nginx能读取文件) 首先,确保JSCSS文件所在的目录所有权正确,Nginx用户(通常是`www-data`或`nginx`)有读取权限。如果文件存储在`/var/www/html/static`(或其他自定义路径): ```bash # 创建目录(如果不存在) sudo mkdir -p /var/www/html/static # 更改目录所有权给Nginx用户(例如www-data) sudo chown -R www-data:www-data /var/www/html/static # 设置目录权限(确保可读可执行) sudo chmod -R 755 /var/www/html/static ``` - **为什么需要这一步?** Nginx进程以特定用户(如`www-data`)运行,如果文件所有权不正确,Nginx无法访问JS/CSS文件,导致403错误[^1][^5]。 - **注意事项**:替换`/var/www/html/static`为你的实际路径。如果使用其他用户,检查Nginx配置中的`user`指令。 #### 步骤2: 配置Nginx location块添加访问控制 在Nginx配置文件中,使用`location`块匹配JSCSS文件扩展名,并添加访问规则。以下是常见方法: ```nginx server { listen 80; server_name example.com; # 配置静态资源目录(基础设置) location /static/ { root /var/www/html; # 对应文件存储路径 expires 30d; # 可选:设置缓存时间 } # 专门配置JSCSS文件的访问权限 location ~* \.(js|css)$ { root /var/www/html/static; # 文件所在目录 # 示例1: 允许所有访问(默认) # 不做额外设置时,所有用户可访问 # 示例2: 限制IP访问(只允许特定IP) allow 192.168.1.0/24; # 允许此IP段 deny all; # 拒绝其他所有IP # 示例3: 添加基础认证(用户名密码) # auth_basic "Restricted Access"; # auth_basic_user_file /etc/nginx/.htpasswd; } # 其他配置(如API代理) location /api/ { proxy_pass http://backend; } } ``` - **关键指令解释**: - `location ~* \.(js|css)$`:使用正则表达式匹配所有JSCSS文件(`~*`表示不区分大小写)。 - `allow` 和 `deny`:基于IP的访问控制,适用于防止未授权访问[^4]。 - `auth_basic`:添加HTTP基础认证,需先创建密码文件(运行`sudo htpasswd -c /etc/nginx/.htpasswd username`)。 - **测试与重载配置**: ```bash sudo nginx -t # 检查配置文件语法 sudo nginx -s reload # 重载Nginx使配置生效[^1] ``` - **注意事项**:如果JS/CSS文件在多个目录,添加多个`location`块或使用通配符路径。 #### 步骤3: 验证访问权限 - 测试文件访问: - 使用浏览器或`curl`访问JS/CSS文件,例如`curl -I http://example.com/static/style.css`。 - 如果配置了IP限制或认证,确保返回状态码200(成功)或401/403(被拒绝)。 - 常见问题排查: - **403错误**:检查文件系统权限(步骤1)或路径是否正确。 - **404错误**:确认`root`路径匹配实际文件位置。 - 查看Nginx错误日志:`tail -f /var/log/nginx/error.log`[^3]。 #### 最佳实践 - **安全增强**:结合引用[4],添加请求速率限制(如`limit_req_zone`)防止滥用。 - **性能优化**:为静态文件设置缓存头(如`expires 30d;`),减少服务器负载。 - **引用参考**:以上方法基于Nginx官方实践,确保配置简洁且安全[^2][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了老板的法拉利

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值