我在 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
好的,你真正需要做的是:
- 从 nginx 提供所有静态文件,并且仅将任何其他请求上传到 Apache。
- 出于性能原因,必要时将主页设为静态文件(例如,位于
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 直接从其缓存中提供这些文件。