Einrichten einer lokalen Entwicklungsumgebung mit Nginx unter Linux (Ubuntu)

1768
Qqwy

Ich bin vor kurzem auf einen neuen Computer umgezogen und habe alle vorhandenen Git-Repositories für Webentwicklungsprojekte von meinem alten Computer übernommen. Auf diesem alten Computer hatte ich Apache installiert, um bestimmte Ordner als Unterverzeichnis meines Ausgangsordners als Entwicklungswebsites zu verwenden (entweder statisch oder mit PHP). So würde zum Beispiel ein persönliches Projekt unter leben /home/myusername/programming/personal/projectname/.

Jetzt habe ich auf dem neuen Computer versucht, Nginx einzurichten, um es auf ähnliche Weise zu verwenden.

Ich habe dieses Handbuch zu DigitalOcean befolgt, um nginx (und MySQL und PHP) auf meinem Laptop zu installieren, auf dem Linux Mint 18.1 (Serena) ausgeführt wird.

Ich habe Nginx wie folgt konfiguriert:

/etc/nginx/sites-available/default:

## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ##  # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server;  # SSL configuration # # listen 443 ssl default_server; # listen [::]:443 ssl default_server; # # Note: You should disable gzip for SSL traffic. # See: https://bugs.debian.org/773332 # # Read up on ssl_ciphers to ensure a secure configuration. # See: https://bugs.debian.org/765782 # # Self signed certs generated by the ssl-cert package # Don't use them in a production server! # # include snippets/snakeoil.conf;  root /var/www/html;  # Add index.php to the list if you are using PHP index index.php index.html index.htm index.nginx-debian.html;  server_name _;  location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  location ~ \.php$ { include snippets/fastcgi-php.conf;  # # With php7.0-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php7.0-fpm: fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; }  # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }   # Virtual Host configuration for example.com # # You can move that to a different file under sites-available/ and symlink that # to sites-enabled/ to enable it. # #server { # listen 80; # listen [::]:80; # # server_name example.com; # # root /var/www/example.com; # index index.html; # # location / { # try_files $uri $uri/ =404; # } #} 

Danach hat das Testen durch Erstellen und /var/www/html/info.php(wie in der Anleitung gezeigt) erfolgreich funktioniert.

Ich habe jetzt versucht, eine Domäne für eines meiner Projekte hinzuzufügen.

/etc/nginx/sites-available/projectname.dev:

server { listen 80; listen [::]:80;  server_name projectname.dev;  root /home/myusername/programming/personal/projectname/; index index.php index.html;  location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  location ~ \.php$ { include snippets/fastcgi-php.conf;  # # With php7.0-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php7.0-fpm: fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; }  # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } 

(Ich habe auch einen symbolischen Link von Sites-Aktiviert zu diesem hinzugefügt:) ln -s /etc/nginx/sites-available/projectname.dev /etc/nginx/sites-enabled/projectname.dev.

Nach dem Neustart von nginx ( sudo service nginx restart) und dem Hinzufügen 127.0.0.1 projectname.devzu meiner /etc/hosts-Datei wurde ich mit einem 404-Fehler begrüßt.

Wenn /var/log/nginx/error.logich reinkomme, finde ich heraus, dass meine Anfragen aus folgendem Grund fehlschlagen:

2017/04/17 21:38:11 [crit] 30176#30176: *3 stat() "/home/myusername/programming/personal/projectname/" failed (13: Permission denied), client: 127.0.0.1, server: projectname.dev, request: "GET / HTTP/1.1", host: "projectname.dev" 

Ich gehe davon aus, dass dies mit der Verwaltung von Dateien / Verzeichnissen in Linux / Unix zusammenhängt. Mein Heimatverzeichnis gehört offensichtlich zu myusername, während nginx vom Benutzer www-data ausgeführt wird . Ich bin mir jedoch nicht sicher, wie ich die Rechte dieses Ordners ändern kann, damit www-data / nginx darauf zugreifen kann (und auf die darin enthaltenen Dateien).

Wie kann das gelöst werden? Und warum bin ich bei der Konfiguration von Apache auf meinem vorherigen Computer (auch mit Linux Mint) nicht auf dieses Problem gestoßen?

0

1 Antwort auf die Frage

0
Alessandro Dotti Contra

Ich bin zwar schon einmal benutzt worden, nginxaber nach Ihrem Hinweis - der mir richtig erscheint - würde ich die Berechtigungen der betreffenden Dateien / Ordner ändern, indem Sie den Gruppeneigentümer in www-data ändern und prüfen, ob die Dateien mindestens 0644 und Ordner bei Lease 0755 haben Berechtigungen.

Wenn Sie Ihre Webanwendung zum Schreiben in einige Dateien oder Verzeichnisse benötigen, ändern Sie entweder den Besitzer dieser Dateien / Verzeichnisse in www-data oder fügen Sie die Schreibberechtigung für die Gruppe hinzu (0664 für Dateien und 0775 für Ordner).

Wenn sie jedoch im Besitz von www-data sind, kann ich sie nicht mehr als "myuser" bearbeiten, oder? Qqwy vor 7 Jahren 0
Mit einem Standardsatz von Berechtigungen (normalerweise 0644) können Sie sie nicht als Benutzer bearbeiten. Um dies zu umgehen, können Sie der Gruppe Schreibberechtigung erteilen und Ihren Benutzer zu dieser Gruppe hinzufügen. Wie Sie sehen, ist der beste Ansatz der, der auf Ihre spezifische Situation zugeschnitten ist (ich habe mich beispielsweise mit `rsync` und einem einfachen Shell-Skript an eine ähnliche Situation gewandt). Alessandro Dotti Contra vor 7 Jahren 0