質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

Nginxでrootと異なるaliasにあるPHPファイルにアクセスするとFile not foundになる(エラー内容: Primary script unknown)

nks
nks

総合スコア1

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0リアクション

0クリップ

6710閲覧

投稿2020/05/12 10:56

前提・実現したいこと

初めてNginxでWEBサイトを構築しております。
システム要件上、URLを以下の通りファイルシステムに対応させなければいけません。

hogehoge.net/にアクセスした場合
→ ファイルシステムの"
/var/www/html/hoge
"に紐づけたい

hogehoge.net/devにアクセスした場合
→ ファイルシステムの"/var/www/html/fuga"に紐づけたい

いずれにおいても、PHPを実行可能にする必要があります。

発生している問題

hogehoge.net/devでのみ、PHPが実行できない状況です。
HTMLファイルは正常に表示できております。

問題の詳細・エラーメッセージ等

以下の単純な"test.php"ファイルを作成し動作確認しております。

<?php echo '<h1>PHP-test</h1><p>php動作確認ページ</p>' ?>

上記"test.php"ファイルを"/var/www/html/hoge"に配置し、ブラウザで**https://hogehoge.net/test.php**へアクセスした場合、正常にPHPの実行結果が表示されます。

しかし、同じファイルを"/var/www/html/fuga"に配置し、**https://hogehoge.net/dev**へアクセスした場合、File not foundが表示されてしまいます。
この際、Nginxのエラーログには以下の内容が出力されます。

2020/05/12 18:50:57 [error] 35485#35485: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: hogehoge.net, request: "GET /dev/test.php HTTP/2.0", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "hogehoge.net"

Nginx設定内容

default.conf

server { listen 443 http2 ssl; server_name hogehoge.net; # # [SSL設定] # (SSL設定は省略します) # # [ログファイル設定] # access_log /var/log/nginx/hogehoge-access.log ltsv; error_log /var/log/nginx/hogehoge-error.log debug; root /var/www/html/hoge; location / { try_files $uri /index.html index.php; location ~ .(php|html)$ { include /etc/nginx/conf.d/_conf.php; } } location /dev/ { alias /var/www/html/fuga; try_files $uri /index.html index.php; location ~ .(php|html)$ { include /etc/nginx/conf.d/_conf.php; } }

上記の通り、PHPの設定は外部ファイルに記述し、各locationブロックから同一の内容をincludeしております。
includeしているファイルの内容は以下です。

/etc/nginx/conf.d/_conf.php

_conf.php

fastcgi_split_path_info ^(.+?.php)(/.*)?$; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params;

試したこと

  • fastcgi_paramの設定値を"SCRIPT_FILENAME $request_filename;"に変更して試行致しましたが、現象は改善せず、エラー内容も同じでした。

  • fastcgi_paramの変数**$document_root**をパス直書き(SCRIPT_FILENAME /var/www/html/fuga$fastcgi_script_name)にしてみましたが、現象は改善せず、エラー内容も同じでした。

環境情報

CentOS 7.8.2003
nginx 1.18.0
PHP 7.4.5


原因究明・問題解決のためご助力を賜りたく存じます。
情報に不足がございましたらお申しつけくださいませ。
何とぞ宜しくお願い致します。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。