Я не уверен, что случилось с моим 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
Вот конференция сайта:
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), и поскольку я храню весь свой веб-контент в /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
устанавливает разрешение на файл для овладелец граммгруппа и шworld, каждая из которых является суммой чтения (4), записи (2), выполнения (1), если требуется
нет надлежащего доступа для чтения и записи
drwxr-x--x brian nobody website1
nginx предназначен только для чтения, поэтому вы должны разрешить ему войти!
cd /srv/
find . -type d -exec chmod 755 {} \;