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

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

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

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

Q&A

解決済

2回答

1372閲覧

nginxでディレクトリを追加した際に403エラーになる。

koichi8888

総合スコア24

nginx

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

0グッド

0クリップ

投稿2020/01/10 02:27

編集2020/01/10 11:22

事象

・ドキュメントルートを追加した設定ファイルがあり、hoge_publicディレクトリを作成した際に~/にアクセスすると403エラーとなります。

・ディレクトリ配下にsitemap.xmlを配置した状態でも~/にアクセスすると403エラー、この状態で~/sitemap.xmlにアクセスするとファイルの中身が正常に表示される。

・/hoge_piublic配下にsitemap.xmlを配置した場合、~/sitemap.xmlとアクセスすれば正常に表示される。
→/home/hogeuser/DocumentRoot/hoge_publicは参照できている

・設定を追加した状態でもディレクトリを作成しない状態であれば、~/でトップページ(@hogehoge)が正常に表示される。

エラー

error.logには下記のようなファイルが存在しないエラーが数十行表示されており、意図した場所を参照しておらず、そこには該当ファイルは存在しない状態です。
エラーのパスはnginxデフォルトのパスのため、ファイルが見つからず、フォールバックしていると思われます。

/usr/share/nginx/html/hoge.html" failed (2: No such file or directory),

想定される原因

・意図した場所を参照していないため、設定ファイルの書き方が間違っている
→~/sitemap.xmlでアクセスできているので、ドキュメントルートの設定は合っており、動作しているはずなのですが。。
・権限の問題
→ディレクトリはドキュメントルートへのすべてのディレクトリでx,r権限が付与されている。~/sitemap.xmlでアクセスできているので権限は問題ないかと思っているのですが。。
・OS設定の問題
→selinuxが原因の場合もある情報がありましたが、無効になっています。

設定ファイル

server { listen 80; server_name hogehoge.com; # ステージングと同じドメイン名となっている access_log /home/kusanagi/hogehoge/log/nginx/access.log main; error_log /home/kusanagi/hogehoge/log/nginx/error.log warn; # rewrite ^(.*)$ https://hogehoge.com$request_uri permanent; charset UTF-8; client_max_body_size 16M; root /home/kusanagi/hogehoge.com/DocumentRoot; index index.php index.html index.htm; rewrite /wp-admin$ $scheme://$host$uri/ permanent; rewrite ^/hogeA(.*)$ http://hogehoge.com/hogeA$1 permanent; rewrite ^/hogeB(.*)$ http://hogehoge.com/hogeB$1 permanent; rewrite ^/hogeC(.*)$ http://hogehoge.com/hogeC$1 permanent; location / {    return 301 https://$host$request_uri    root /home/hogeuser/DocumentRoot/hoge_public;    add_header Access-Control-Allow-Origin "*";    add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";    add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";    add_header Access-Control-Allow-Credentials true;    #try_files $uri @hogehoge; try_files $uri $uri/ @hogehoge; # ここを追記しました。 }

確認したこと

・ファイルに読み取り権限が付いている(ステージングと同じ)
・ドキュメントルートの各ディレクトリにx,r権限が付いている(ステージングと同じ)
・selinuxは無効になっている
・/etc/nginx/conf.d/配下の別の設定ファイルが読み込まれてはいない

期待する動作

~/にアクセスした場合も@hogehoge(TOPページのパスが設定されています)にアクセスされ、正常に表示される。

補足情報(FW/ツールのバージョンなど)

EC2
Wordpress
Lalavel
RDS
nginx

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take88

2020/01/10 08:25

他のVirtualHost が設定されてるんじゃないかと 推測してます。設定ファイルを全部張ってもらうことはできますか?
koichi8888

2020/01/10 08:33

全部は難しいのですが、server_nameが複数設定されてことを指していますでしょうか。
koichi8888

2020/01/10 08:39 編集

確認したところ、server_nameは一つしかなく、stgと同じドメイン名(stg.hogehoge.com)が記述されています。 現状、本番にもアクセスできていますが、本番のドメイン名に変更するのが正しい記述でしょうか。 特に必要な情報があれば、マスキングして情報に追加させていただきたいです。
koichi8888

2020/01/10 08:45

関係ないとは思いますが、ステージングでは同じ設定で正常動作しており、差分としては@hogehogeにhttp→httpsのリダイレクト設定がされています。 ``` location @hogehoge { if ($http_x_forwarded_proto = 'http') { return 301 https://$server_name$request_uri; } ```
guest

回答2

0

他の方にも指摘したことがありますが、

ログに記載された参照ディレクトリ

/usr/share/nginx/html/

提示された設定ファイルのDocumentRootのディレクトリが違いますので
確実に別の設定ファイルによって処理されています。

投稿2020/01/10 09:04

yukky1201

総合スコア2751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koichi8888

2020/01/10 10:21

確認したところ、同じserver_nameで複数の末尾が.confになっている状態でした。 設定も下記の通り、複数ファイルが読み込ませる設定となっていました。 /etc/nginx/nginx.conf include /etc/nginx/conf.d/*.conf;
guest

0

ベストアンサー

ログから推測できるのは、ドキュメントルートが異なるほかのバーチャルホストが応答を返している可能性が高いです。

たぶん「デフォルトサーバー」が応答を返してる状態だと思います。

解決方法は 何通りか あって
① バーチャルホストが 一つだけの状態にする
② server_name に適切なホスト名を指定する。
③ バーチャルホスト hogehoge.com を デフォルトサーバーにする

① は、Include されてるファイルを含めて、設定ファイル全体を見て server ディレクティブが 1つになるように調整してください。

② は、クライアントがアクセスする可能性のある ホスト名を網羅して server_name に追加してください。

server { listen 80; # サーバー名: hogehoge.com、IPアドレス 192.168.1.1 の場合に応答を返す バーチャルホストを設定 server_name hogehoge.com 192.168.1.1;

③は listendefault_server オプションを指定してみてください。

server { listen 80 default_server; server_name hogehoge.com;

設定変更後はNginxを再起動すると反映されます。

投稿2020/01/13 02:22

編集2020/01/13 02:26
take88

総合スコア1379

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問