我正在尝试将 Nginx 设置为反向代理和 Web 服务器。但是在尝试了解如何执行此操作时遇到了问题。
假设我使用默认的 Symfony2 nginx 配置(http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html):
server {
server_name example.com www.example.com;
root /var/www/project/web;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}
# DEV
# This rule should only be placed on your development environment
# In production, don't include this and don't deploy app_dev.php or config.php
location ~ ^/(app_dev|config)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
# Prevents URIs that include the front controller. This will 404:
# http://domain.tld/app.php/some-path
# Remove the internal directive to allow URIs like this
internal;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
}
我想添加一个配置,以便 Nginx 也可以充当反向代理,而不仅仅是一个网络服务器。
我是否需要将、等配置添加到同一个配置文件
proxy_pass
中proxy_cache
?我是否需要为特定路线设置配置?或者禁用它们?
例如,如果我不想
/app_dev.php/abc
缓存路线,我该怎么办?
答案1
基本上,nginx 是代理服务器。其功能包括代理 HTTP、HTTPS、IMAP、POP3、SMTP 和其他协议。对于 HTTP(S) 代理,后端可以是 FastCGI 服务器(如 PHP-FPM)或其他 Web 服务器。
对于您需要的 FastCGI 后端fastcgi 模块。例如,您需要使用 定义后端fastcgi_pass
。要代理另一个网站,您需要HTTP 代理模块. 您需要使用诸如 这样的方向proxy_pass
来proxy_cache
控制此模块的行为。
- 我是否需要将 proxy_pass、proxy_cache 等配置添加到同一个配置文件中?
是的
- 我是否需要为特定路线设置配置?或者禁用它们?
例如你需要代理特定的URL www.example.com/myawesomeapp
,然后使用location来匹配URL
location /myawesomeapp {
proxy_pass http://<upstream_block_name>;
... other parameter ...;
}
- 例如,如果我不想缓存路由 /app_dev.php/abc?我需要做什么?
使用proxy_cache_bypass。您可以通过if
以下指令进行设置本教程。