2012-12-25 28 views
3

我想如果用戶代理是MSIE 6並且顯示自定義錯誤消息,nginx將返回錯誤403。 我使用了這段代碼,一切工作都在第一分鐘。然後它只是在沒有消息的情況下返回錯誤!不知道爲什麼...... 下面的代碼(我試圖把「而不是」有沒有純文本」或「,仍然沒有運氣):Nginx:返回錯誤403並顯示一條消息

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$;   
    include /etc/nginx/fastcgi.conf; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    if ($http_user_agent ~ "MSIE 6") { 
     return 403 "Browser not supported. Please update or change to another one."; 
    } 
} 

編輯:忘了說,這是在PHP塊中,因爲我想阻止MSIE 6僅適用於PHP請求。

回答

1

其實,你的配置應該工作。你可以使用curl來檢查它:

# curl -i -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1" http://localhost/i.php 
HTTP/1.1 403 Forbidden 
Server: nginx/1.3.6 
Date: Wed, 26 Dec 2012 10:05:34 GMT 
Content-Type: application/octet-stream 
Content-Length: 62 
Connection: keep-alive 

Browser not supported. Please update or change to another one. 

訪問日誌也值得檢查(默認log_format包括$ http_user_agent變量)。

順便說一句,在/etc/nginx/fastcgi.conf中有什麼?

另一件事是,如果你希望人們用實際MSIE 6瀏覽器中看到你的消息,你最好做這樣的事情:

location ~ \.php$ { 
    ... 
    if ($http_user_agent ~ "MSIE 6") { 
     return 403; 
    } 
    error_page 403 /old_browser.html; 
} 

,並創建old_browser.html您的郵件。請注意這個文件應該大於512字節,以確保MSIE將顯示它的內容而不是一些標準的IE 403消息。像http://browsershots.org這樣的工具非常適合調試這種情況。 :)

+0

謝謝! :) 我不知道> 512字節的東西。可能這就是爲什麼IE6顯示默認403消息而不是我的原因! 這裏是我的fastcgi.conf:http://pastebin.com/5T6Rp5Uv – MultiformeIngegno

+1

順便說一句,有關於nginx錯誤響應中512字節的額外指令,請查看http://nginx.org/r/msie_padding: ) –

+0

嗯,這很奇怪,因爲如果默認情況下(我沒有覆蓋它),IE不應該顯示它的默認錯誤頁面(但是我的消息),因爲請求應該被填充到512,我錯了。 。? – MultiformeIngegno