如何让 nginx 仅提供网站主页?

如何让 nginx 仅提供网站主页?

我在 80 端口上运行 nginx,在 8080 端口上运行 Apache。我希望我的网站主页由 nginx 提供服务,其他所有请求都通过 Apache 传递。我发现这篇很棒的文章并理解 nginxproxy_pass指令,但我不知道正确的正则表达式来告诉 nginx 只提供我的网站主页。由于用户只需访问http://mysite.com(不带/index.htm)即可访问该网站,所以我不知道应该使用什么“位置”值。

这是一个示例配置文件,演示了如何将所有页面发送到 Apache(如我所愿),文件/css夹和图像文件除外。如您所见,nginx 使用一个简单的正则表达式来指定 nginx 应提供的内容。我应该使用什么正则表达式来指定 nginx 只提供主页?或者我应该使用try_files其他方式?

server {
      root /usr/local/www/mydomain.com;
      server_name mydomain.com www.mydomain.com;

      # next line says anything that matches this regex should be sent to Apache     
      location / {
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            # Apache is listening on port 8080
            proxy_pass http://127.0.0.1:8080;
      }

      # Example 1 - Specify a folder and its contents
      # To serve everything under /css from nginx only
      location /css { }

      # Example 2 - Specify a RegEx pattern such as file extensions
      # to serve only image files directly from Nginx
      location ~* ^.+\.(jpg|jpeg|gif|png)$
      {
            # this will match any file of the above extensions
      }
}

答案1

好的,你真正需要做的是:

  1. 从 nginx 提供所有静态文件,并且仅将任何其他请求上传到 Apache。
  2. 出于性能原因,必要时将主页设为静态文件(例如,位于index.html文档根目录中)。这样,nginx 将直接为其提供服务。删除它即可恢复到以前的行为。

你的配置看起来应该像这样:

server {
      root /usr/local/www/mydomain.com;
      server_name mydomain.com www.mydomain.com;

      index index.html;

      location @upstream {
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            # Apache is listening on port 8080
            proxy_pass http://127.0.0.1:8080;
      }

      location / {
            try_files $uri $uri/ @upstream;
      }
}

稍后您应该考虑在您的 Web 应用程序内进行缓存;如果它将生成的 HTML 文件写入磁盘,那么您可以让 nginx 直接从其缓存中提供这些文件。

相关内容