【问题标题】:how to make NGINX serve static content like .js, .css, .html?如何让 NGINX 提供静态内容,如 .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 目录中???

标签: css windows tomcat 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语法。我的意思是测试缓存速度。如何检查您的缓存是否有所不同?
      • 我还想要一种方法来测试它是否有效。有没有办法跟踪从哪个服务器提供静态文件?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2019-09-20
      • 2016-01-21
      • 2019-01-22
      • 2014-07-30
      • 2011-03-24
      • 2021-11-27
      相关资源
      最近更新 更多