Używam domyślnej konfiguracji podczas dodawania określonego katalogu z nginx zainstalowanym na moim komputerze ubuntu 12.04.
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
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
root /username/test/static;
try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
...
...
}
Chcę tylko, aby prosty statyczny serwer nginx obsługiwał pliki z tego katalogu. Jednak sprawdzając error.log
widzę
2014/09/10 16:55:16 [crit] 10808#0: *2 stat() "/username/test/static/index.html" failed (13: Permission denied), client:, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "domain"
2014/09/10 16:55:16 [error] 10808#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html
Mam już zrobione chown -R www-data:www-data
na /username/test/static
, mam je ustawić chmod 755
. Nie wiem, co jeszcze trzeba ustawić.
www-data
użytkownik może wejśćcd
do/username/test/static
katalogu:sudo -u www-data cd /username/test/static
Odpowiedzi:
Nginx działa w katalogu, więc jeśli nie możesz
cd
przejść do tego katalogu od użytkownika nginx, to się nie powiedzie (podobnie jakstat
polecenie w twoim dzienniku). Upewnij się, żewww-user
puszkacd
do końca/username/test/static
. Możesz potwierdzić, żestat
zakończy się niepowodzeniem lub sukcesem, uruchamiającW twoim przypadku prawdopodobnie
/username
problem dotyczy katalogu. Zwyklewww-data
nie ma uprawnień docd
katalogów domowych innych użytkowników.Najlepszym rozwiązaniem w takim przypadku byłoby dodanie
www-data
dousername
grupy:i upewnij się, że
username
grupa może wejść do wszystkich katalogów wzdłuż ścieżki:Aby zmiany zadziałały, uruchom ponownie nginx
źródło
umask
. Jeśli potrzebujesz bardziej ogólnego rozwiązania, które nie wymagachmod
każdego nowego katalogu, to jest rozwiązanie. Wymaga odwrotnego skojarzenia grupowego (username
dowww-data
grupy) i użyciasetgid
. Możesz zadać nowe pytanie, aby uzyskać bardziej szczegółowy opis, a ja z przyjemnością odpowiem.nginx
użytkownik może uzyskać dostęp do katalogu mojej witryny, ale nadal w dziennikach błędów pojawia się komunikat o odmowie pozwolenia.Właśnie miałem ten sam problem na pudełku CentOS 7.
Wygląda na to, że uderzyłbym w selinux. Przełączenie selinux w tryb permissive (
setenforce permissive
) rozwiązało na razie problem. Spróbuję wrócić z właściwą poprawką.źródło
ls -Z myFile.js
pokaże kontekst SELinux:-rw-r--r--. nginx nginx unconfined_u:object_r:user_home_t:s0 myFile.js
Użyj,chcon -v --type=httpd_sys_content_t myFile
aby zmienić zawartość SELinux.sudo setenforce 0
naprawiłem to dla mnie.SELINUX
wartość nadisabled
in/etc/selinux/config
, a następnie zrestartować komputer. Gdy jest ustawiony napermissive
, nadal może przeprowadzać testy za kulisami (przy użyciu cennego procesora), ale nie podejmuje żadnych działań.Nginx musi mieć dostęp + x do wszystkich katalogów prowadzących do katalogu głównego witryny.
Upewnij się, że masz + x we wszystkich katalogach w ścieżce prowadzącej do katalogu głównego witryny. Na przykład, jeśli katalog główny witryny to / home / username / siteroot:
źródło
W CentOS 7.0 miałem ten
Access Deined
problem spowodowany przez SELinux i te kroki rozwiązały problem:Aktualizacja: tylko notatka poboczna z tego, czego nauczyłem się podczas korzystania z wirtualnych serwerów Linux digitalocean lub, jak nazywają je Droplets . Korzystanie z SELinuksa wymaga przyzwoitej ilości pamięci RAM. Najprawdopodobniej nie będziesz w stanie uruchomić i zarządzać SELinux na droplecie z mniej niż 2 GB pamięci RAM.
źródło
setenforce 0
. Jednak patrząc wstecz na to, co faktycznie robi to rozwiązanie, zdałem sobie sprawę, że muszę ponownie uruchomić polecenia, aby zaktualizować uprawnienia użytkownika nginx. To wydawało się działać i mogłem ustawić SELinux z powrotem na egzekwowanie.Być może masz uruchomiony system Linux z ulepszonymi zabezpieczeniami, więc dodaj do tego regułę. Miałem 13 błędów, mimo że uprawnienia były ustawione i istniał użytkownik.
chcon -Rt httpd_sys_content_t /username/test/static
źródło
Objaw:
Nie można przesłać obrazów do biblioteki multimediów WordPress.
Przyczyna:
(CentOS)
yum update
Błąd:
Rozwiązanie:
chown -R www-data:www-data /var/lib/nginx
źródło
Domyślnie dane statyczne po zainstalowaniu nginx będą znajdować się w / var / www / html. Możesz więc po prostu skopiować swój folder statyczny do / var / html / i ustawić rozszerzenie
w ngix.conf (lub / etc / nginx / sites-available / default)
To zadziałało dla mnie na Ubuntu, ale myślę, że nie powinno to różnić się zbytnio w przypadku innych dystrybucji.
Mam nadzieję, że to pomoże.
źródło
Zmień swoją
nginx.conf
user
właściwość na właścicielawww-static
plików.źródło
Napotkałem ten problem, rozwiązałem go, aby nadać uprawnienia użytkownikowi nginx i zgrupować coś takiego:
źródło
W moim przypadku folder, który obsługiwał pliki, był dowiązaniem symbolicznym do innego folderu utworzonego za pomocą
Mimo że uprawnienia (użytkownika i grupy) były prawidłowe w folderze docelowym (łącze symboliczne), nadal występował błąd, ponieważ Nginx musiał mieć również uprawnienia do całej hierarchii folderu źródłowego.
źródło
W końcu znalazłem drogę. Krótko mówiąc, powiedzmy, że twoja nazwa użytkownika to
joe
i że prowadzisz witrynę internetową w swoim osobistym systemie plików/home/joe/path/to/website
.Musisz dosłownie powiedzieć systemowi, że
nginx
jest twoim kumplem.Miejsce
nginx
wjoe
grupie:Następnie, jeśli nadal nie działa, sprawdź prawa dostępu do
/home/joe
katalogu. To prawdopodobnie powód, dla którego nginx nie może dotrzeć do pliku, ponieważ nawet jeśli jest twoim przyjacielem, musisz teraz otworzyć mu drzwi do swojego domu:Otóż to. To dosłownie wszystko, co musisz zrobić, aby dać nginx dostęp do swoich plików lokalnych :)
Nie sądzę, aby ta metoda miała problemy z bezpieczeństwem, ponieważ
nginx
ma wysoki autorytet i tylko administrator może zmienić grupę.nginx
może teraz czytać zawartośćjoe
katalogów. Naruszeniem bezpieczeństwa jest tylko wtedy, gdy właścicielnginx
konta jest inny niż użytkownik, z którego otwierasz dostęp do katalogu, ale w moim przypadku jestem właścicielem obu stron, czyli w kontekście lokalnym.źródło
Miałem ten sam problem, używam Plesk Onyx 17 z Centos7. Mogłem zobaczyć ten błąd w proxy_error_log w dziennikach domeny, której dotyczy problem. Wszystkie katalogi / pliki w / var / www / vhosts / są własnością odpowiednich użytkowników (właścicieli domen) i możesz zobaczyć, że wszystkie są w grupie psacln. Tak więc rozwiązaniem było dodanie nginx również do tej grupy, aby mógł zobaczyć, czego potrzebuje:
I rzeczywiście, zrestartuj nginx i przeładuj stronę za pomocą Ctrl + F5.
źródło
Znalazłem obejście: Przeniosłem folder do folderu konfiguracyjnego nginx, w moim przypadku „/ etc / nginx / my-web-app”. A potem zmieniłem uprawnienia na użytkownika root "sudo chown -R root: root" my-web-app ".
źródło
Możesz także dodać, który użytkownik będzie uruchamiał nginx. W pliku nginx.conf wprowadź następujące zmiany:
Możesz dodać powyższą linię jako pierwszą linię w swojej konfiguracji nginx. Możesz wpisać nazwę dowolnego użytkownika, który ma uprawnienia do zapisu w tym katalogu.
źródło
Zwykle jest to problem z uprawnieniami ... Dla mnie to, ponieważ używam / root / ** jako root nginx, potrzebuje wyższych uprawnień. Prostym sposobem jest po prostu przeniesienie projektu do utworzonego przez siebie katalogu.
źródło