Nginx
如果文件存在於使用 Nginx 的代理伺服器上,則僅代理通過
我熟悉提供靜態文件(如果存在)並將其他所有內容傳遞給 index.php 的做法。
這可以與代理傳遞以及代理伺服器上是否存在靜態文件結合使用嗎?
例如,假設我有這兩個伺服器:
伺服器 1:
- 索引.php
- 樣式表.css
伺服器 2(代理):
- 關於/index.html
- 聯繫人.html
example.com 設置為解析到伺服器 1。當請求進入時,nginx 配置查看傳入的 URL,並查看它是否映射到伺服器 2 上的文件。如果是,它將請求代理到伺服器上的文件2. 如果文件不存在,它只是將它保存在伺服器 1 上。但是,在伺服器 1 上,它仍然更喜歡存在的文件,並將其他路由映射到 index.php。
如果這令人困惑,這裡有一些例子
- example.com/about –> 映射到伺服器 2,about/index.html
- example.com/contact.html –> 映射到伺服器 2,contact.html
- example.com/careers –> 映射到伺服器 1,index.php
- example.com/stylesheet.css –> 映射到伺服器 1,stylesheet.css
如果兩台伺服器上都存在相同的文件,它應該映射到伺服器 2。
免責聲明:這不是操作反向代理的有效方式。
您將每個請求反向代理到伺服器 2,如果該伺服器不能滿足請求,它會以 404 狀態響應。
proxy_intercept_errors
伺服器 1 可以通過設置和來處理 404 狀態error_page
。例如:
location / { proxy_pass ...; proxy_intercept_errors on; error_page 404 = @fallback; } location @fallback { try_files $uri /index.php; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_pass ...; }
唯一的例外是 URI 結尾
.php
不會首先發送到 server2。有關詳細資訊,請參閱此文件。