nginx
インストールに何が起こったのかわかりません。突然、すべてのページリクエストが403
ページにリダイレクトされます。
昨日、ブロックするユーザーエージェントを追加しようとしました。その時点からサービスを再開し、すべてが403に送信されていました。その変更を取り消し、nginx
を再起動しても、すべてが403
ページに転送されます。 。 $http_user_agent
と$http_referer
ifステートメントを削除しても、すべてが403に送信されます。
バックアップからnginx
フォルダー全体を復元しましたが、すべてのページリクエストは引き続き403ページに送信されます。
これをトラブルシューティングする方法がわからない場合、confファイルはクリーンに戻ります。リクエストが届いたときにnginx
に対して実行できるトレースはありますか?
[root@soupcan nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
これがウェブサイトのconfです:
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/website1/access.log main;
error_log /var/log/nginx/website1/error.log;
root /srv/www/website1;
## Block http user agent - morpheus fucking scanner ##
if ($http_user_agent ~* "morfeus fucking scanner|ZmEu|Morfeus strikes again.|OpenWebSpider v0.1.4 (http://www.openwebspider.org/)") {
return 403;
}
if ($http_referer ~* (semalt.com|WeSEE)) {
return 403;
}
## Only allow GET and HEAD request methods. By default Nginx blocks
## all requests type other then GET and HEAD for static content.
if ($request_method !~ ^(GET|HEAD)$ ) {
return 405;
}
location / {
index index.html index.htm index.php;
ssi on;
}
location ~ \.php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/website1/$fastcgi_script_name;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# Redirect server error pages to the static page
error_page 403 404 /error403.html;
location = /error403.html {
root /usr/share/nginx/html;
}
}
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_disable "msie6";
gzip_min_length 1100;
gzip_vary on;
gzip_proxied any;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/json application/x-javascript
text/xml application/xml application/rss+xml text/javascript
image/svg+xml application/x-font-ttf font/opentype
application/vnd.ms-fontobject;
server_tokens off;
include /etc/nginx/conf.d/*.conf;
# Load virtual Host configuration files.
include /etc/nginx/sites-enabled/*;
# BLOCK SPAMMERS IP ADDRESSES
include /etc/nginx/conf.d/blockips.conf;
}
Webrootディレクトリの権限:
[root@soupcan nginx]# namei -om /srv/www/website1/
f: /srv/www/website1/
dr-xr-xr-x root root /
drwxr-xr-x root root srv
drwxrwxr-x brian nobody www
drwxr-x--x brian nobody website1
CentOS 6.6とSELinuxがnginxを壊すことがわかりました。私はまだ解決策を探していますが、ここに原因があります。
解決策は以下に掲載されています。
この問題は、CentOSを6.5から6.6にアップグレードし、SElinuxがコンテンツタイプを許可する方法が原因で発生しました。このアップグレードでは、SElinuxはデフォルトでhttpd_t
コンテンツのみを許可し(Apacheの処理方法と同様)、すべてのWebコンテンツを/srv/www/
に保存するため、これらのユーザー作成フォルダーにはコンテンツラベルが自動的に設定されませんでした。システム。
これを確認するには、webrootおよび/etc/nginx
ディレクトリに対して次のコマンドを実行し、コンテンツタイプを比較します。
ls -Z /srv/www/
これらのコマンドを実行してnginx
を再起動すると、すべてが正常に機能しています。
grep nginx /var/log/audit/audit.log | audit2allow -m nginx > nginx.te
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp
このSElinuxモジュールが何をするのかわかりませんが、同じ問題について この投稿 を読んでいることがわかりました。これを修正するために2番目に行ったことが実際に機能したと思うので、今日はバックアウトしてみるかもしれません。
[09:15 AM] robotoverlord ~>chcon -Rv --type=httpd_sys_content_t /srv/www/
[09:15 AM] robotoverlord ~> ls -Z /srv/www/
drwxr-xr-x. www-data nobody unconfined_u:object_r:httpd_sys_content_t:s0 website1
[09:15 AM] robotoverlord ~>service nginx restart
問題が解決しました!
chmod ogw file
o wner、g roup、w orldのファイルにアクセス許可を設定します。それぞれ、read(4)、write(2)、必要に応じてexecute(1)
読み取り/書き込みへの適切なアクセスがありません
drwxr-x--x brian nobody website1
nginxは読み取り専用なので、彼を入れなければなりません!
cd /srv/
find . -type d -exec chmod 755 {} \;