Nginx
NginX 嵌套位置問題:吐出原始 PHP
我已經努力理解 NginX 在位置訂單處理中的邏輯,但它仍然超出了我的能力範圍,我懷疑這就是我遇到以下問題的原因。
我執行了一個 SugarCRM 實例,我已經用基本身份驗證阻止了它。有一些文件,例如 ical_server.php,我想為其關閉基本身份驗證,因此智能手機可以輕鬆訪問這個已經擁有自己基於令牌的安全性的訂閱日曆。
我在我的conf中有這個。但是 ical_server.php 被下載為原始 php,這表明它沒有到達 fastcgi 解析器,即使 CRM 的其餘部分工作得很好。
location /sugarcrm/ { auth_basic "Username and Password are required"; auth_basic_user_file /var/web/webaddress.tld/private/.htpasswd; # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { location ~ _server.php$ { auth_basic "off"; } try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 600; fastcgi_send_timeout 600; fastcgi_max_temp_file_size 0; fastcgi_buffer_size 56k; fastcgi_buffers 16 48k; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
如何實現這種選擇性關閉基本身份驗證?
由於我無法通過他的評論以正確的答案獎勵 Alexey Ten,因此這裡是工作配置:
location /sugarcrm/ { auth_basic "Username and Password are required"; auth_basic_user_file /var/web/webaddress.tld/private/.htpasswd; # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { location ~ _server.php$ { auth_basic "off"; include /etc/nginx/conf.d/global/fastcgi.conf; } try_files $uri =404; include /etc/nginx/conf.d/global/fastcgi.conf; } }
因為,正如 Alexey 指出的那樣,fastcgi 不會被繼承,所以我必須再次將它放在 _server.php$ 位置。通過包含,它也可以很好地整理東西。現在 php 被很好地解析了。
(事實上 auth_basic 在該文件上完全關閉的事實實際上並不是有意的,但這已在另一個問題中涵蓋。只是提到它以防有人發現這個……)
再次感謝阿列克謝。