Назад | Перейти на главную страницу

nginx 403 Запрещенная ошибка хостинга в домашнем каталоге пользователя

Я установил nginx 1.1.19 на Ubuntu 12.04 на моем локальном компьютере и сохранил значение по умолчанию /etc/nginx/nginx.conf кроме изменения директивы пользователя.

/etc/nginx/nginx.conf

user nginx www-data;
worker_processes 4;
pid /var/run/nginx.pid;
...

Я хочу, чтобы простой статический сайт работал с корневым веб-сайтом в моем пользовательском каталоге (допустим, мое имя пользователя - «ubuntu»). Вот конфигурация моего тестового сайта.

/ и т. д. / nginx / сайты-доступные / тестовый сайт

server {
    #listen   80; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default ipv6only=on; ## listen for ipv6

    root /home;
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to index.html
    try_files $uri $uri/ /index.html;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
    }

}

Теперь очевидно, что все мои файлы помещаются в корневой каталог, поэтому я НЕ буду размещать это на реальном сервере, но это иллюстрирует мою точку зрения. Если я создам простую веб-страницу в /home/index.html (не внутри моей пользовательской папки ubuntu), я могу получить доступ к странице по адресу http://localhost/

Это РАБОТАЕТ просто отлично. Теперь я хочу просто поместить веб-корень ВНУТРИ пользовательской папки. Итак, в / etc / nginx / sites-available / test-site я меняю корневую директиву на `root / home / ubuntu ;. Я воссоздаю символическую ссылку на тестовый сайт, перемещаю /home/index.html в /home/ubuntu/index.html, останавливаю и запускаю сервер nginx. Теперь я получаю ошибку 403 Forbidden.

Мое первое подозрение заключалось в том, что это проблема с разрешениями. Однако когда я бегу ls -al index.html я вижу

-rw-r--r--  1 nginx   www-data   183 Aug 12 13:13 index.html

что мне нравится? Даже запустив chmod 777 /home/ubuntu/index.html, чтобы разрешения

-rwxrwxrwx 1 nginx www-data 183 Aug 12 13:13 index.html

не помогает. /etc/init.d/nginx configtest тоже не вызывает ошибок, и я уверен, что символическая ссылка в /etc/

Итак, я занимаюсь этим несколько часов, и теперь мне интересно, что такого особенного в моем пользовательском каталоге, что я не могу ничего обслуживать внутри него? В наши дни Ubuntu шифрует домашние каталоги? Может ли это быть проблема? У меня также есть эта проблема на экземпляре EC2 Ubuntu 12.04 (не знаю, зашифрованы ли там каталоги пользователей)

Разрешения для домашнего каталога пользователей по умолчанию

Таким образом, кажется, что разрешения по умолчанию для домашних каталогов пользователей в Ubuntu 12.04 равны 700. Nginx должен иметь разрешение на чтение файлов, которые должны обслуживаться, И иметь разрешение на выполнение в каждом из родительских каталогов на пути от корня до обслуживаемых файлов.

Вы можете предоставить своему каталогу пользователя эти разрешения, запустив

chmod 701 user_home

Вы также можете использовать 755, который является настройкой разрешений по умолчанию для домашнего каталога во многих системах.

Каталоги / файлы в вашем корневом веб-каталоге могут принадлежать пользователю www-data или вашему обычному личному пользователю, если пользователь / группа, от имени которой работает nginx (как определено в nginx.conf), имеет разрешение READ для всех файлов, которые будут обслуживаться и разрешение на выполнение для всех корневых веб-каталогов.

Я просто установил, что все каталоги в моем корневом веб-каталоге принадлежат моей учетной записи пользователя и имеют разрешения 755, и я установил для всех файлов, которые будут обслуживаться из корневого веб-сайта, разрешения 664, поскольку это были значения по умолчанию на моей машине.

Примечание о преобразовании номеров разрешений в String Rep.

Ex. drwxr-x--x becomes 751.

Игнорируйте первый символ (d для каталога, - для файла и т. Д.). Остальные 9 символов образуют двоичную тройку, где любой символ без тире - это 1, а тире - это 0.

So drwxr-x--x becomes rwxr-x--x 
becomes 111 101 001 
which is converted to a decimal 751

Мне нужно было напомнить об этом, когда я имел дело с разрешениями.