Nginxをセットアップして、テストページを適切に表示しています。ルートパスを変更しようとすると、すべての権限が同一であっても、403 Forbiddenエラーが表示されます。さらに、nginxユーザーが存在します。
nginx.conf:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
index index.html index.htm;
server {
listen 80;
server_name localhost;
root /var/www/html; #changed from the default /usr/share/nginx/html
}
}
namei -om /usr/share/nginx/html/index.html
f: /usr/share/nginx/html/index.html
dr-xr-xr-x root root /
drwxr-xr-x root root usr
drwxr-xr-x root root share
drwxr-xr-x root root nginx
drwxr-xr-x root root html
-rw-r--r-- root root index.html
namei -om /var/www/html/index.html
f: /var/www/html/index.html
dr-xr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxr-xr-x root root html
-rw-r--r-- root root index.html
エラーログ
2014/03/23 12:45:08 [エラー] 5490#0:* 13 open() "/var/www/html/index.html"が失敗しました(13:許可が拒否されました)、クライアント:XXX.XX.XXX。 XXX、サーバー:localhost、リクエスト: "GET /index.html HTTP/1.1"、ホスト: "ec2-XXX-XX-XXX-XXX.compute-1.amazonaws.com"
同じ問題が発生しましたが、これはSELinuxが原因でした。
SELinuxが実行されているかどうかを確認するには:
# getenforce
次回の再起動までSELinuxを無効にするには:
# setenforce Permissive
Nginxを再起動して、問題が解決しないか確認してください。設定を永続的に変更する場合は、/etc/sysconfig/selinux
を編集できます
SELinuxが問題の場合は、次のコマンドを実行して、nginxがwwwディレクトリを提供できるようにします(これをテストする前にSELinuxをオンに戻します。つまり、# setenforce Enforcing
)。
# chcon -Rt httpd_sys_content_t /path/to/www
それでも問題が解決しない場合は、getsebool -a
のブールフラグを確認してください。特に、ネットワークアクセスのためにhttpd_can_network_connect
をオンにする必要がある場合があります。
# setsebool -P httpd_can_network_connect on
私にとっては、httpがwwwディレクトリを提供できるようにするだけで十分でした。
私は同じ問題に遭遇しました。 Fedora/RedHat/CentOSを使用している場合、これが役立つ場合があります。
setsebool -P httpd_read_user_content 1
お役に立てれば。
まず、nginxがファイルシステムにアクセスできるようにするには、次のコマンドを実行する必要があります
Sudo setsebool -P httpd_read_user_content 1
次のコマンドでファイルまたはディレクトリを確認できます。
ls -Z
それでもアクセスできない場合は、次のコマンドを使用してファイルとフォルダーのSELinuxプロパティを変更してみてください。
chcon -Rt httpd_sys_content_t /path/to/www
ただし、上記のコマンドは、FuseまたはNFSシステムのファイルには適用できません。
Fuseマウントからのファイルの提供を有効にするには、次を使用できます。
setsebool httpd_use_fusefs 1
NFSマウントからのファイルの提供を有効にするには、次を使用できます。
setsebool httpd_use_nfs 1
これはProwlasの答えに追加されますが、私は十分に評価することはできません:/ path/to/wwwがユーザーのホームディレクトリである場合。試してみてください:
setsebool -P httpd_enable_homedirs=1
これで問題が解決しました
ソース: http://forums.fedoraforum.org/archive/index.php/t-250779.html
アクセスが拒否される理由は2つあります。
アクセスは [〜#〜] dac [〜#〜] によって拒否されます。ユーザー、グループ、およびファイルのアクセス許可を再確認してください。構成ファイルで指定されたユーザーとして実行する場合、nginxプロセスが新しいhtmlルートパスにアクセスできることを確認してください。
アクセスは [〜#〜] mac [〜#〜] によって拒否されます。その中で最も広く使用されているのはSELinuxです。問題の原因かどうかを確認するには、nginxプロセスを停止して、次のコマンドを実行します。
setenforce Permissive
次に、nginxを再度起動して、アクセスが許可されているかどうかを確認します。
または、ファイルコンテキストを確認できます。
setenforce Enforcing
ls -Zd /usr/share/nginx/html /var/www/html
2つのコンテキストが異なる場合、新しいhtmlルートパスのコンテキストを変更する必要がある場合があります。
chcon -R -t httpd_sys_content_t /var/www/html
Nginxを再起動し、正常に機能するかどうかを確認します。その場合、変更を永続的にすることができます。
semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
restorecon -Rv /var/www/html
これらのコマンドの一部は、rootとして実行する必要があります。
論理的に思えますが、すべてのファイルはrootユーザーです。それをnginxユーザーに変更してみてください。リストの許可が最初に拒否されないようにしたかっただけです。
Sudo chown -R nginx:nginx /var/www/html
私は同じ問題に遭遇しました:
コマンドラインから再起動しました(これまでずっとWebminを使用していました)が、このエラーに気付きました。
aed@aed:/var/www/test.local$ Sudo service nginx restart
* Restarting nginx nginx
nginx: [warn] conflicting server name "test.local" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "test.local" on 0.0.0.0:80, ignored
どうやら定義の重複があったため、「test.local」にアクセスしようとして失敗しました。
フォルダーに新しいユーザーを追加したときにこの問題に遭遇しました/home/new_user
新しい仮想ホストとして。これらのフォルダー(/home
、/home/new_user
、/home/new_user/xxx
...)は755
ので、私の問題は解決しました。最後に、私の問題は/var/log/nginx/error.log
ファイル。
他のユーザーにパス全体の読み取りを許可する必要があることに注意してください。また、Dropboxがルートディレクトリに700を設定することを忘れないでください。そう chmod 755 ~/Dropbox
は私の問題を解決しました。
私が使用していた:
Sudo service nginx start
私が使用する場合:
Sudo nginx
...すべて正常に動作します。誰でもこれら2つの違いを説明できますか?
ファイルnginx.confを変更し、ユーザー名をアカウント名に変更して、nginx.itを再起動します。