如何让 NGINX 提供静态内容,如 .js、.css、.html?

Posted

技术标签:

【中文标题】如何让 NGINX 提供静态内容,如 .js、.css、.html?【英文标题】:how to make NGINX serve static content like .js, .css, .html? 【发布时间】:2014-07-09 17:02:54 【问题描述】:

最近我开始使用 nginx,我发现我们可以将它用于反向代理,从自身提供静态内容,从而减少加载时间。我的本地机器上有一个 Tomcat/JBoss 服务器,我想将 NGINX 放在它前面,这样静态内容将从 NGINX 提供,而全部由 Tomcat/JBoss 提供。我的 Tomcat/JBoss 应用程序在 http://localhost:8081/Test 上运行,我的 NGINX 配置工作正常,但无法加载 css/js/jpg 文件。这是我的战争结构,静态内容在哪里

Test.war

TEST
  |
  |--->Resources
  |       |------->CSS
  |       |         |----> style.css
  |       |
  |       |-------->Images
  |                  |----> a.jpg
  |                  |----> b.jpg
  |   
  |--->WEB-INF
  |        |----->Web.xml
  |        |----->spring-servlet.xml
  |
  |--->JSP
         |---->login.jsp

我认为问题是因为绝对路径,所以我应该复制资源文件夹并将其放在 NGINX 的某个文件夹中,并将我的 NGINX 配置为从自己的目录中选择文件而不是去 Tomcat/JBoss 吗?我是新手,所以我不知道这样做有没有人可以帮助我。这是我的 NGINX(windows) 配置文件

server 
        listen 80;
        server_name localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / 
             proxy_pass http://127.0.0.1:8081/Test/;
        

【问题讨论】:

添加一个更具体的位置/Resources/ 指向绝对路径应该可以工作。 (你需要将它指向爆炸的战争文件夹) 所以我应该在我的 NGINX 服务器目录中放置一个 Resources 文件夹? 实际上我的想法是将我所有的静态内容放在 NGINX 服务器目录中,它们应该从这里提供,而不是从 JBoss/Tomcat 加载它们,但我不知道如何配置 NGINX 来加载所有这些静态内容来自它自己的服务器目录 这也应该可以。但是您需要阻止 proxy_pass 生效。定义更具体的位置。 @Thilo:您是否有任何示例 conf 文件,您这样做是为了在 NGINX 目录中查找静态内容并将所有内容都放在 JBoss 目录中??? 【参考方案1】:

这对我有用:

location /static 
     alias /usr/src/app/project/static;
 

【讨论】:

【参考方案2】:

试试

server 
    listen 80;
    server_name localhost;

    location ~* \.(css|js|gif|jpe?g|png)$ 
        expires 168h;
    

    location / 
        proxy_pass http://127.0.0.1:8081/Test/;
    


如何测试

在您的 CLI 中运行 ab -c 20 -n 1000 https://your-site/any-file

您会看到测试所用时间急剧减少。

【讨论】:

【参考方案3】:

您可以使用正则表达式添加位置

server 
    listen 80;
    server_name localhost;

    location ~* \.(js|jpg|png|css)$ 
        root path/to/tomcat/document/root/Test/;
        expires 30d;
    

    location / 
        proxy_pass http://127.0.0.1:8081/Test/;
    

【讨论】:

设置后如何测试? @ihue sudo service nginx restart @ihue 改用sudo nginx -t 进行测试 我不是要测试nginx语法。我的意思是测试缓存速度。如何检查您的缓存是否有所不同? 我还想要一种方法来测试它是否有效。有没有办法跟踪从哪个服务器提供静态文件?

以上是关于如何让 NGINX 提供静态内容,如 .js、.css、.html?的主要内容,如果未能解决你的问题,请参考以下文章

无涯教程:Nginx - 静态内容介绍

NGINX - 如何提供包含 css、pngs 和 js 作为相对路径的静态 html

使用 Traefik 时如何使用 Nginx 和 Django Gunicorn 提供静态内容

Nginx 反向代理 Serving Node.js app 静态文件

Nginx缓存设置教程

如何使用 docker 映像生成静态文件以从 nginx 映像提供服务?