ホームページ  >  記事  >  バックエンド開発  >  nginx php403エラーを解決する方法

nginx php403エラーを解決する方法

藏色散人
藏色散人オリジナル
2022-11-23 09:59:142504ブラウズ

nginx php403 エラーの解決策: 1. ファイルのアクセス許可を変更するか、selinux を有効にします; 2. php-fpm.conf を変更し、必要なファイル拡張子を追加します; 3. php.ini の内容を「cgi.fix_pathinfo =」に変更します0"; 4. php-fpm を再起動します。

nginx php403エラーを解決する方法

このチュートリアルの動作環境: 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。