Ответ 1
Я использовал:
sudo service nginx start
Если я использую:
sudo nginx
... все работает отлично. Может ли кто-нибудь объяснить разницу между этими двумя?
У меня есть настройка 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, server: localhost, request: "GET/index.html HTTP/1.1", хост: "ec2-XXX-XX-XXX-XXX.compute-1.amazonaws.com"
Я использовал:
sudo service nginx start
Если я использую:
sudo nginx
... все работает отлично. Может ли кто-нибудь объяснить разницу между этими двумя?
У меня возникла одна и та же проблема, и это произошло из-за SELinux.
Чтобы проверить, работает ли SELinux:
# getenforce
Чтобы отключить SELinux до следующей перезагрузки:
# setenforce Permissive
Перезапустите Nginx и проверьте, не исчезла ли проблема. Если вы хотите постоянно изменять настройки, вы можете редактировать /etc/sysconfig/selinux
Если SELinux является вашей проблемой, вы можете запустить следующее, чтобы nginx мог обслуживать ваш каталог www (убедитесь, что вы включили SELinux, прежде чем тестировать это. i.e, # 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.
Ну кажется логичным, все файлы являются пользователями root, попробуйте изменить его на пользователя nginx, просто хотите убедиться, что это не разрешено листинг.
sudo chown -R nginx:nginx /var/www/html
Это дополнение к ответу Prowlas, но у меня нет достаточной репутации для комментирования: Если /path/to/www является домашним каталогом пользователя. Вы должны попробовать:
setsebool -P httpd_enable_homedirs=1
Это решило мою проблему
Источник: http://forums.fedoraforum.org/archive/index.php/t-250779.html
Я столкнулся с той же проблемой:
Был ли перезапуск из командной строки (я все время использовал Webmin) и заметил эту ошибку:
[email protected]:/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" не удалась.
Я столкнулся с той же проблемой. Если вы используете Fedora/RedHat/CentOS, это может помочь вам:
setsebool -P httpd_read_user_content 1
Надеюсь, что это поможет.
Я столкнулся с этой проблемой, когда добавил нового пользователя с папкой /home/new_user
в качестве нового виртуального хоста. Убедитесь, что эти папки (/home
, /home/new_user
, /home/new_user/xxx
...) 755
так, что они разрешили мою проблему. Наконец, я обнаружил, что моя проблема была корректной в соответствии с файлом /var/log/nginx/error.log
.
это решило ту же проблему:
перезапустите Nginx и повторите попытку. Если это не удается, повторите проверку журналов. Это сработало для меня