Я не уверен, что произошло с моим nginx
установка. Внезапно все запросы страницы перенаправляются к 403
страница.
Вчера я попытался добавить агент пользователя для блокирования, перезапущенный сервис от той точки, которую все отправлялось в 403. Я отступил то изменение, перезапуск nginx
и все все еще направляется к 403
страница. Даже если я удаляю $http_user_agent
и $http_referer
если операторы все все еще отправляется в 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 dir:
[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.5 до 6.6 и тем, как SElinux позволяет вводить тип содержимого. С этим обновлением SElinux по умолчанию разрешает только содержимое httpd_t
(аналогично тому, как они обрабатывают apache), и поскольку я храню весь свой веб-контент в / srv / www /
, эти папки, созданные пользователем, метка содержимого не устанавливается автоматически системой.
Чтобы проверить это, запустите следующую команду для вашего корневого веб-каталога и ваших каталогов / 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, но я обнаружил, что он читал этот пост о той же проблеме. Я могу попробовать поддержать его сегодня, потому что я думаю, что второе, что я сделал, чтобы исправить это, действительно сработало.
[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
Дополнительная информация о маркировке контента для SElinix
Проблема решена!
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 {} \;