nginx php403 エラーの解決策: 1. ファイルのアクセス許可を変更するか、selinux を有効にします; 2. php-fpm.conf を変更し、必要なファイル拡張子を追加します; 3. php.ini の内容を「cgi.fix_pathinfo =」に変更します0"; 4. php-fpm を再起動します。
このチュートリアルの動作環境: linux5.9.8 システム、PHP バージョン 8.1、Dell G3 コンピューター。
nginx php403 エラーを解決するにはどうすればよいですか?
nginx php 403 原因分析
問題:
設定された Web サイトにアクセスすると、エラー メッセージが表示されます: アクセスが拒否されました (403)
一般的な解決策:
1. ファイル権限の問題
ファイル権限が問題である可能性があります問題は、読み取り権限がありません。
または、selinux が閉じられていません。
2. security.limit_extensions
nginx エラー ログ error.log を確認し、次のエラーを見つけます:
2016/07/07 10:20:13 [error] 17710#0: *2145 FastCGI sent in stderr: "Access to the script '/home/www/game/10313156.html' has been denied (see security.limi t_extensions)" while reading response header from......
5.3.9 以降、PHP正式に「security.limit_extensions」という設定が追加されましたが、デフォルトでは拡張子が「.php」のファイルのみ実行が許可されており、他の種類のファイルはサポートされていないという問題が発生しています。
正式な説明:
; Limits the extensions of the main script FPM will allow to parse. This can ; prevent configuration mistakes on the web server side. You should only limit ; FPM to .php extensions to prevent malicious users to use other extensions to ; exectute php code. ; Note: set an empty value to allow all extensions. ; Default Value: .php ;security.limit_extensions = .php .php3 .php4 .php5
php-fpm.conf を変更: (必要なファイル拡張子を追加)
security.limit_extensions = .php .html .js .css .jpg .jpeg .gif .png .htm
3.cgi.fix_pathinfo
この URL からアクセスすると、アクセス拒否エラーが表示されます。
nginx エラー ログ:
2016/07/08 09:47:12 [error] 24297#0: *3348 FastCGI sent in stderr: "Access to the script '/home/www/home.php/game/qr' has been denied (see security.limit_extensions)" while reading response header......
php.ini の変更: (cgi.fix_pathinfo のデフォルトは 1)
cgi.fix_pathinfo = 1
正式な説明:
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo
実際には、cgi.fix_pathinfo = 1 はファイル タイプ エラー解析の脆弱性を引き起こす可能性があるため、cgi.fix_pathinfo = 0 に設定することをお勧めします。
(脆弱性の理解について:
cgi.fix_pathinfo=1の場合、パス:/foo.jpg/file.phpにアクセスし、file.phpファイルが存在しない場合、 php パーサー どのファイルを実行するかを推測し、パスに沿って振り返ります。foo.jpg が存在し、PHP コードが含まれている場合、PHP パーサーは foo.jpg を実行します。
cgi.fix_pathinfo= の場合0 現時点では、PHP インタープリターは指定されたパスのみを試行し、ファイルが見つからない場合は処理を停止します。
)
ただし、cgi.fix_pathinfo = 0 に設定すると、多くの MVC フレームワーク (たとえば、 ThinkPHP として) が正しく機能しません。
4.
php.ini に次のように設定します: open_basedir=/home:/tmp/:/proc/
php-fpm を再起動します
Web ページにアクセスし、Ctrl F5 キーを押して頻繁に更新すると、「アクセス拒否」エラーが報告されます。 「アクセス拒否」は時々表示されるだけで、常に 403 が表示されるわけではありません。
nginx エラー ログ レコード:
2016/07/09 08:32:40 [error] 26954#0: *2127721 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: open_basedir restriction in effect. File(/home/www/touch/web/index.php) is not within the allowed path(s): (/home/wwwroot:/tmp/:/proc/) in Unknown on line 0 PHP message: PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0 Unable to open primary script: /home/www/touch/web/index.php (Permission denied)" while reading response header from upstream, client: 117.136.1.22, server: test.hjq.com, request: "GET /index.php?c=Zs&a=getcontent HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "test.hjq.com"
2、In your nginx config file set fastcgi_pass to your socket address (e.g. unix:/var/run/php-fpm/php-fpm.sock;) instead of your server address and port. 3、Check your SCRIPT_FILENAME fastcgi param and set it according to the location of your files. 4、In your nginx config file include fastcgi_split_path_info ^(.+\.php)(/.+)$; in the location block where all the other fastcgi params are defined.
推奨学習: 「PHP ビデオ チュートリアル 」
以上がnginx php403エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。