2013-06-23 74 views
0

我目前使用Nginx與Apache相結合,服務以下靜態文件,成功。從我/sites-enabled/defaultNginx作爲反向代理服務器:提供沒有擴展名的文件

提取物:

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|xml)$ { 
root /home/website/public_html/app/public; 
} 

但我也有設在這裏的一些緩存文件: /home/website/public_html/app/storage/cache /home/website/public_html/app/storage/views /home/website/public_html/app/storage/sessions

/cache/sessions也有子目錄。所有子目錄和文件都有隨機文件名,並且沒有擴展名。

我希望Nginx能夠提供這些文件。

我試過這個(例如/views文件夾),但沒有成功。我什至沒有在日誌中,但Nginx重新啓動正確,並沒有錯誤的網站加載。

location /views { 
      alias /home/website/public/app/app/storage/views; 
      access_log /var/log/nginx/web.views.access.log; 
      error_log /var/log/nginx/web.views.error.log; 
} 

嘗試這樣做還可以,但同樣的效果:

location ~* ^.$ { 
      root /home/website/public/app/app/storage/views; 
      access_log /var/log/nginx/web.views.access.log; 
      error_log /var/log/nginx/web.views.error.log; 
} 

還試圖在這些2次嘗試加入add_header Content-Type application/octet-stream;,但沒有任何變化。

最後,這裏是我的nginx.conf

http { 
include  /etc/nginx/mime.types; 
access_log /var/log/nginx/access.log; 

sendfile  on; 

keepalive_timeout 65; 
tcp_nodelay  on; 

gzip on; 
gzip_disable "MSIE [1-6]\.(?!.*SV1)"; 

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 
} 

的HTTP部分(/var/log/nginx/access.log/var/log/nginx/error.log不顯示與我的問題任何事情,太)。

感謝您的任何線索和幫助!

編輯

完成當前/sites-enabled/default文件(是的,有一個雙/應用/,這是正常的;))

# You may add here your 
# server { 
# ... 
# } 
# statements for each of your virtual hosts 

server { 

listen 80; ## listen for ipv4 
listen [::]:80 default ipv6only=on; ## listen for ipv6 

server_name www.website.com website.com; 

#access_log /var/log/nginx/localhost.access.log; 

location/{ 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $remote_addr; 
proxy_set_header Host $host;   
proxy_pass http://127.0.0.1:8080/; 
    access_log off; 
    #root /var/www; 
    #index index.html index.htm; 
} 

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|xml)$ { 
    root /home/website/public_html/app/public; 
    expires 30d; 
} 


location ~* ^.$ { 
    add_header Content-Type application/octet-stream; 
    root /home/website/public/app/app/storage/views; 
    access_log /var/log/nginx/bt.views.access.log; 
    error_log /var/log/nginx/bt.views.error.log; 
} 

} 
+0

請發佈完整的'sites-available/default'配置文件,我可以幫助你,而不是完整的配置和答案。 – Fleshgrinder

+0

當然,我只是用它更新了我的文章。謝謝 ! – Tanyio

回答

0

的問題是,你需要一些東西來識別文件沒有任何延伸。一個子目錄或者一直存在於請求中的東西。您的正則表達式僅適用於以點開頭的請求(例如http://example.com/.)。以下服務器配置假定所有URL都以storage開頭,因爲這是識別這些文件的唯一可能性。

請注意,我使用try_files指令來重寫nginx應該查找文件的內部路徑。 root指令不適用於您想要達到的目的。

最後但並非最不重要的是,您應該始終使用正則表達式嵌套位置塊。嵌套級別沒有限制。 nginx將創建某種樹數據結構來搜索最佳匹配位置。所以在寫塊的時候想一下樹。

server { 
    listen  80 default; 
    listen  [::]:80 default ipv6only=on; 
    server_name www.website.com website.com; 
    root   /home/website/public_html/app; 

    location/{ 

     # Matches any request for a URL ending on any of the extension 
     # listed in the regular expression. 
     location ~* \.(jpe?g|gif|css|png|js|ico|txt|xml)$ { 
      expires  30d 
      access_log off; 
      try_files /public$uri =404; 
     } 

     # Matches any request starting with storage. 
     location ~* ^/storage { 
      access_log /var/log/nginx/bt.views.access.log; 
      error_log /var/log/nginx/bt.views.error.log; 
      try_files /app$uri; 
     } 

     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $remote_addr; 
     proxy_set_header Host $host;   
     proxy_pass  http://127.0.0.1:8080/; 
     access_log  off; 
    } 
} 
+1

非常感謝,Fleshgrinder。明確的解釋和提示,以幫助更好地理解Nginx如何工作。像這樣嵌套,這個文件對我來說似乎更合乎邏輯!哦,我剛剛在第二個'try_files'中添加了期望的參數,在第一個中做了「404如果失敗」,並且在過期後param;)後面缺少';' – Tanyio

相關問題