Apache2
使用 Apache2 提供靜態內容
我對 apache2 真的很陌生,以前曾使用過 Nginx。我正在嘗試在 apache2 中使用別名來提供靜態內容。從一個簡單的例子開始。
我試過了,它也沒有用。建議?
000-default.conf:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName 13.67.35.134 Alias /static /home/ubuntu/static <Directory /home/ubuntu/static/> Options FollowSymLinks </Directory> ProxyPass / http://127.0.0.1:5000/ </VirtualHost>
我也根據這個答案用引號嘗試了它:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName 13.67.35.134 Alias /static "/home/ubuntu/static" <Directory "/home/ubuntu/static"> Options FollowSymLinks </Directory> ProxyPass / http://127.0.0.1:5000/ </VirtualHost>
我的 logo.png 位於
/home/ubuntu/static/logo.png
別名模組已啟用:
$ apache2ctl -M | grep alias alias_module (shared)
當我輸入 13.67.35.134/static/logo.png 時,我得到一個404,這是 access.log
[26/Jan/2018:02:31:02 +0000] "GET /static/logo.png HTTP/1.1" 404 423 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
解決方案
感謝@AndrewSchulman 指出我的 000-default.conf 文件中的代理通行證導致無法訪問我的靜態內容。
除非您在 localhost:5000 上執行另一個 Web 伺服器(我不知道您為什麼要這樣做,除了我猜的測試),您應該刪除該
ProxyPass / http://127.0.0.1:5000/
指令。
我看到這已解決,但對於遇到此問題並需要保留 ProxyPass 配置的任何其他人,您可以指定忽略靜態 URL(在 Alias 和 ProxyPass 配置行之間的某個點,添加
ProxyPass /static !
)。(此處有關靜態文件和 ProxyPass 的相關問答)