Я установил 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, поскольку это были значения по умолчанию на моей машине.
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
Мне нужно было напомнить об этом, когда я имел дело с разрешениями.