-
LINUX > nginx (serveur web) sous Ubuntu
INSTALLATION NGINX
sudo apt-get update sudo apt-get install nginx
NGINX se lance généralement directement à la suite de cette actualisation.
Taper
http://127.0.0.1ouhttp://localhostouhttp://ip_du_serveurSi l’installation est réussie, on obtient le message suivant :
Welcome to nginx !
CONFIGURATION NGINX
Dans
/etc/nginx, on trouve entre autres :nginx.confle fichier de configuration centralconf.d/répertoire contenant des fichiers de configuration additionnelssites-available/fichiers de configuration des sites disponiblessites-enabled/fichiers de configuration des sites actifs (liens symboliques vers le répertoire site-availables)A chaque modification des fichiers, il faut redémarrer le serveur :
sudo service nginx reload
Tester la Configuration
sudo service nginx configtest
Syntaxe du fichier de Configuration
Tous les réglages commencent par le
nom variablerespectif.Un
espace videdélimite deux arguments.La ligne se termine toujours par un point-virgule.
worker_connections 768;
Les events-variable comportent des arguments qui leurs sont propres et sont entourées par des accolades
{}.events { worker_connections 768; multi_accept on; }Pour désactiver une variable : signe dièse
#.# multi_accept on;
SITE PAR DÉFAUT
Configuration du site par Défaut
Fichier du site par défaut
/etc/nginx/sites-available/default:server { listen 80; root /chemin/vers/fichiers/du/site; index index.html index.htm; server_name localhost; location / { try_files $uri $uri/ /index.html; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex off; } }
EXPLICATIONS
listen 80port d’écoute :TCP/80rootrépertoire où se trouve la racine du site :/chemin/vers/fichiers/du/siteserver_name localhostà partir de l’URL http://localhost/1 - Créer le répertoire qui va héberger le site :
mkdir /chemin/vers/fichiers/du/site
2 - Éditer la page d’accueil :
/chemin/vers/fichiers/du/site/index.html<html><body>Coucou!</body></html>
3 - Fichier de configuration du site.
sudo vi /etc/nginx/sites-available/monsite
Avec le contenu suivant (par exemple) :
server { listen 80; root /chemin/vers/fichiers/du/site; index index.html index.htm; 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; } }
On supprime le site par defaut et on active le notre:
cd /etc/nginx/sites-enabled sudo rm default sudo ln -s ../sites-available/monsite
On redémarre le serveur Nginx:
sudo service nginx restart
Puis on teste la page:
http://localhost/Pour rendre le site "visible depuis l’extérieur", il faut changer la ligne:
server_name localhost;
par:
server_name www.monsite.com;
Il faut bien sur que le nom
www.monsite.compointe sur l’adresse IP du serveur Nginx…choisir les répertoires locaux pour des types de contenus différents.
Exemple : un dossier
/chemin/vers/imagescomprenant des images.Entrer le répertoire dans le fichier de configuration, en conservant la directive du bloc serveur, qui est une sous-directive de la directive http bloc.
http { server { } }
Dans ce bloc de serveur, les deux répertoires contenant les images et documents HTML doivent être indiqués. Cela donne le résultat suivant :
server {location / { root /chemin/par/defaut; }location /mesimages { root /chemin/vers/images; } }Toutes les URL avec
/mesimages/pointeront désormais vers le répertoire/chemin/vers/images.Sinon, le répertoire par défaut sera
/chemin/par/défaut.On redémarre le service :
sudo service nginx restart
Mise en place d’un serveur proxy NGINX
Exemple : Afficher les images demandées et transmettre toutes les autres demandes au serveur Web.
La première étape consiste à définir le serveur principal dans nginx.conf :
server { listen 8080; root /data/up1; location / { } }On utilise ici le port 8080 pour les requêtes entrantes. Placez par ailleurs le répertoire /data/up1 et retirez la page index.html de cet endroit.
Le serveur proxy et ses fonctions sont définis pour livrer des contenus d‘images, impliquant l’utilisation d’indications sur le serveur principal : le protocole (
http), le nom (localhost), et le port (80800).server { location / { proxy_pass http://localhost:8080; } location ~ \.(gif|jpg|png) $ { root /data/images; } }Le second location renvoie au serveur proxy toutes les demandes dont les URIs se terminent par .gif, .jpg et .png, en chargeant les contenus correspondants depuis le répertoire local /data/images.
Toutes les autres requêtes sont transmises au serveur principal. Comme avec les réglages précédents, vous enregistrez votre proxy images par reload-signal sur le processus principal avec le redémarrage de NGINX. D’autres directives possibles pour des paramétrages complexes de proxy se trouvent sur le manuel en ligne NGINX.
Optimisation !
Ne pas loguer les message 404 sur le fichier favicon.ico (pour ne pas surcharger ses logs) :
location = /favicon.ico {
access_log off;
return 204;
}
Durée d’expiration des en-tête des fichiers statiques (pour les caches):
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|xml)$ { # access_log off; expires 30d; }
Ne pas oublier de faire :
chown -R www-data:www-data /var/www chmod -R 775 /var/www
drop.conf
pour ne pas logger des informations non indispensable et empêcher de donner accès à des fichiers pouvant être sensible :
/etc/nginx/drop.conf:# Do not log robots.txt if not found location = /robots.txt { access_log off; log_not_found off; } # Do not log favicon.ico if not found location = /favicon.ico { access_log off; log_not_found off; } # Do not give access to hidden files location ~ /\. { access_log off; log_not_found off; deny all; } # Do not give access to vim backuped files location ~ ~$ { access_log off; log_not_found off; deny all; }
Ensuite dans les fichiers de configuration, il suffira de rajouter ces 2 lignes :
/etc/nginx/sites-enabled/*server { # Drop config include drop.conf; }
VirtualHosts
On va créer par exemple le blog deimos.fr : /etc/nginx/site-available/blog
server { listen 80; server_name blog.deimos.fr; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/nginx-default/blog; index index.html index.htm index.php; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } }
On va activer cette conf :
ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/blog
Port par défaut
Pour stipuler le port par défaut, vous pouvez utiliser un include dans vos fichiers de configuration qui feront appel à un fichier comprenant le port. De la sorte il sera très facile de modifier d’un coup le port par défaut : /etc/nginx/listen_port.conf
listen 80;
Et donc dans les fichiers de configuration : /etc/nginx/sites-available/*.conf
server { include listen_port.conf;
Page de maintenance
Voici une manière élégante de créer une page de maintenance : /etc/nginx/sites-enabled/www.deimos.fr
server { location / { try_files /maintenance.html $uri $uri/ @maintenance; } location @maintenance { return 503; } }
Il ne vous reste plus qu’à insérer une page maintenance.html à la racine de votre site et cette page s’affichera le temps que vous fassiez vos modifications. Sinon vous pouvez toujours utiliser cette méthode : /etc/nginx/sites-enabled/www.deimos.fr
server { location / { if (-f $document_root/maintenance.html) { return 503; } } error_page 503 @maintenance; location @maintenance { rewrite ^(.*)$ /maintenance.html break; } }
Limiter le flood et les sniffers
Limiter le nombre de requêtes par IP en utilisant le module limit_req.
Pour activer ce module, insérez cette ligne dans votre configuration core (globale) d’Nginx: /etc/nginx/nginx.conf
http { # Flood/DoS protection limit_req_zone $binary_remote_addr zone=limit:10m rate=5r/s; limit_req_log_level notice; }
Voici les options utilisées ici:
zone=limit: les IP seront stockées dans une zone appelée limit de 10M. Prévoyez assez d’espace sur cette zone pour éviter des erreurs 503 s’il n’y a plus d’espace. Une zone d’1M peut contenir 16 000 entrées de type binary_remote_addr.rate: on autorise 5 requêtes par secondes.log_level: vous pouvez supprimer cette ligne si vous ne souhaitez pas savoir dans les logs si les limites sont atteintes. Ici je souhaites tracer ce genre d’événements.Puis, informer sur quel vhost appliquer cette mesure de sécurité : /etc/nginx/sites-enabled/
location ~ \.php$ { limit_req zone=limit burst=5 nodelay; include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_intercept_errors on; }
Là encore on retrouve des options:
zone: j’utilise la zone limit précédemment déclarée dans la configuration http (core)burst: j’autorise le burst à 5 connexions maximumnodelay: si vous souhaitez que les requêtes soient tout de même servies mêmes si elles sont ralenties, utilisez le paramètre nodelay.Il ne reste plus qu’à redémarrer nginx.
Configuration d’applications
Server status
Il est possible d’avoir des informations sur l’état du serveur, de ce type : /etc/nginx/sites-available/www.deimos.fr
server { # Nginx status location /server-status { # Turn on nginx stats stub_status on; # I do not need logs for stats access_log off; # Allow from localhost allow 127.0.0.1; # Deny others deny all; } # PHP-FPM status location /php-fpm_status { include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; # I do not need logs for stats access_log off; # Allow from localhost allow 127.0.0.1; # Deny others deny all; } location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_intercept_errors on; # I do not need logs for stats access_log off; # Allow from localhost allow 127.0.0.1; # Deny others deny all; } }
Configurez convenablement les adresses autorisées ou bien placez une authentification classique via htpasswd.
Voici le résultat donné lorsqu’on accède à la page (http://www.deimos.fr/server-status) :
Active connections: 11 server accepts handled requests 8109 8109 58657 Reading: 0 Writing: 1 Waiting: 10
WordPress
Pour la configuration de WordPress sous Nginx, voici un exemple : /etc/nginx/sites-available/blog.deimos.fr
server { include listen_port.conf; listen 443 ssl; ssl_certificate /etc/nginx/ssl/deimos.fr/server-unified.crt; ssl_certificate_key /etc/nginx/ssl/deimos.fr/server.key; ssl_session_timeout 5m; server_name blog.deimos.fr; root /usr/share/nginx/www/deimos.fr/blog; index index.php; access_log /var/log/nginx/blog.deimos.fr_access.log; error_log /var/log/nginx/blog.deimos.fr_error.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_cache mycache; fastcgi_cache_key $request_method$host$request_uri; fastcgi_cache_valid any 1h; include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_intercept_errors on; } # Drop config include drop.conf; # BEGIN W3TC Browser Cache gzip on; gzip_types text/css application/x-javascript text/x-component text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon; location ~ \.(css|js|htc)$ { expires 31536000s; add_header Pragma "public"; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; add_header X-Powered-By "W3 Total Cache/0.9.2.4"; } location ~ \.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ { expires 3600s; add_header Pragma "public"; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; add_header X-Powered-By "W3 Total Cache/0.9.2.4"; } location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ { expires 31536000s; add_header Pragma "public"; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; add_header X-Powered-By "W3 Total Cache/0.9.2.4"; } # END W3TC Browser Cache # BEGIN W3TC Minify core rewrite ^/wp-content/w3tc/min/w3tc_rewrite_test$ /wp-content/w3tc/min/index.php?w3tc_rewrite_test=1 last; rewrite ^/wp-content/w3tc/min/(.+\.(css|js))$ /wp-content/w3tc/min/index.php?file=$1 last; # END W3TC Minify core } }
FAQ
Analyser les règles qui passent
Vous pouvez voir le comportement de vos règles (redirect 301 par exemple) en utilisant curl :
> curl -I "http://wiki.deimos.fr" HTTP/1.1 301 Moved Permanently Server: nginx Content-Type: text/html Location: http://wiki.deimos.fr/index.php Content-Length: 178 Accept-Ranges: bytes Date: Wed, 16 Jan 2013 22:17:05 GMT X-Varnish: 2038764987 Age: 0 Via: 1.1 varnish Connection: keep-alive
Cela vous permet d’analyser comment fonctionne celui ci et détecter d’éventuels problèmes.
client intended to send too large body
Si vous avez ce genre de messages dans vos logs :
nginx client intended to send too large body
nginx n’autorise pas à envoyer des fichiers d’une taille aussi grande. Il faut utiliser cette variable dans la partie ‘server’ :
client_max_body_size 10M;
Remplacez 10M par la valeur maximale souhaitée.
Access denied.
C’est PHP-FPM qui rencontre des problèmes sur la gestion des extensions. Vous avez le choix de rajouter l’extension en question : /etc/php5/fpm/pool.d/www.conf
security.limit_extensions = .php .php3 .php4 .php5 .cgi
ou bien de désactiver cette sécurité (non recommandé) : /etc/php5/fpm/pool.d/www.conf
security.limit_extensions = false
Configuration basique de Nginx
Fichier de configuration
Le fichier de configuration se trouve à /usr/local/nginx/conf/nginx.conf
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
La seconde ligne
worker_processesest un directive, la valeur 1 indique que Nginx travail un seulworkerprocessusOrganisation et inclusion.
Ligne 16, on peut voir la directive
include.include mime.types;
Cette directive permet d’inclure un fichier spécifique. Voici un petit exemple pour comprendre:
nginx.conf: user nginx nginx; worker_processes 4; include other_settings.conf; other_settings.conf: error_log logs/error.log; pid logs/nginx.pid;
Ce que Nginx va interpréter:
user nginx nginx; worker_processes 4; error_log logs/error.log; pid logs/nginx.pid;
Par défaut, l’insertion de sites ce fait de cette manière. On va utiliser la directive
<mon_site>.confou:include sites/*.conf;
Les directives en bloque
On peut voir également dans le fichier par défaut, la directive
events, celle-ci se présente en bloque:events { worker_connections 1024; }
Ce bloque est définie par le module
events.La directive
worker_connectionspeut seulement être utilisé dans le bloqueevents.On peut également imbriquer des bloques les uns dans les autres:
http { server { listen 80; server_name exemple.fr; acces_log /var/log/nginx/exemple.fr.log; location ^~ /admin/ { index index.php; } } }
Dans le bloque
http, on peut déclarer plusieurs bloqueserver. Ces bloquesserverpermettent de configurer des hôtes virtuelles. Nous verrons au fur et à mesure l’utilisation des bloques.Les directives des modules noyau.
Ces modules ne peuvent être utilisés qu’une seule fois, et doivent être placé dans la racine du fichier de configuration.
error_log
Contexte: main, http, server, et location
Syntaxe: error_log /file/path level;
Valeur par défaut: logs/error.log error.
Où
levelest une des valeurs suivantes: debug, info, notice, warn, error, et crit (du plus au moins détaillé: debug fourni les messages de logs fréquents, crit seulement les messages critiques).Active les messages d’erreur sur plusieurs niveaux: Application, HTTP serveur, hôte virtuel, et dossier de l’hôte virtuel.
En redirigeant la sortie des logs vers /dev/null/, on peut désactiver les logs d’erreurs. En utilisant la directive suivante depuis la racine du fichier de configuration:
error_log /dev/null crit;modules d’évenements
Toutes les directives de la liste suivante, doivent être placé dans le bloque
events, qui doit être placé à la racine du fichier de configuration:user nginx nginx; master_process on; worker_processes 4; events { worker_connections 1024; use epoll; } [...]
modules de configuration
Le module de configuration permet l’insertion de fichier grâce à la directive
include. Cette directive peut être inséré n’importe où dans le fichier de configuration et accepte un seul paramètre - le chemin du fichier.include /file/path.conf; include sites/*.conf;
Note : Si aucun chemin absolue n’est défini,le chemin est relatif au dossier de configuration.
Travailler sur la configuration par défaut.
Worker_processes: Permet d’utiliser les 4 cœurs de notre machine. A adapter suivant la machine.worker_processes 4;Log_not_found: Permet de logger les erreurs 404.log_not_found on; log_not_found off;
Worker_connections
Nombre de connections admises par le serveur (en relation avec le worker_processes, 1 worker permet 1024 connections).
LOGS
Les fichiers de logs :
/var/log/nginx/Rotation des logs
Pour éviter la saturation des disques en quelques mois , il faut une rotation journalière :
Nous allons dédier cette tâche à logrotate
vi /etc/logrotate.d/nginx
Et voici le contenu :
/var/log/nginx/*.log { daily missingok rotate 5 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then /usr/local/nginx/sbin/nginx -s reload > /dev/null fi endscript }
Configuration principale
Documentation est compléte ici.
Vhosts
Dans nginx.conf , la ligne
include /etc/nginx/site-enabled/*;permet de gérer les vhosts : tous les fichiers de conf présents dans ce répertoire seront analysés par nginx à son lancement.Création d’un vhost type :
vi /etc/nginx/site-available/monsite.com
Et voilà le contenu type :
server { listen 80; server_name monsite.com www.monsite.com; location / { root html; index index.html index.htm; } }
Activation du vhost, en créer un lien symbolique vers site-enabled :
ln -s /etc/nginx/site-available/monsite.com /etc/nginx/site-enabled/
Démarrer nginx
Vérifier les erreurs au lancement :
tail -f /var/log/nginx/error.log
CONFIGURER UN SITE WEB
Éditer son contenu comme suit :
server { listen 80; server_name first_site.com; root /var/www/first_site; index index.html index.php; location / { try_files $uri $uri/ =404; } }
Explication :
listenport d’écouteserver_namenom de domaine que l’on veut filtrerrootrépertoire qui hébergera notre site web. (attention aux droits d’accès)indexspécifie dans l’ordre les fichiers qui seront recherchés en premier comme fichier d’index par le serveur weblocationconfigurer des actions automatiques lorsqu’un chemin est appeléVérifier les configurations :
nginx -t
Recharger la configuration de NGINX
service nginx reloadPROXY
Il faut créer un fichier proxy.conf dans le répertoire conf.d qui contiendra les paramètres de configuration du serveur proxy :
vi /etc/nginx/conf.d/proxy.conf
Entrer ensuite le contenu :
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; client_header_buffer_size 64k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 16k; proxy_buffers 32 16k; proxy_busy_buffers_size 64k;
Vérifier les configurations de nginx :
nginx -tSi tout est OK, relancez le service :
service nginx reloadPour créer un site qui pointe vers un autre (fonction proxy), Il faut créer un site en respectant les mêmes spécifications que celles vues plus haut dans le chapitre Configuration d’un site web. Sauf que nous allons adapter le fichier de configuration du site avec les configurations minimales suivantes :
sudo vi /etc/nginx/sites-available/first_proxy.comserver { listen 80; server_name first_proxy.com; location / { proxy_pass http://localhost/; } }
Pensez à créer le lien symbolique pour votre site si cela n’avait pas déjà été fait.
NB : aucun root car les requêtes seront redirigées vers le site pour lequel nous jouerons le rôle de serveur proxy.
Proxy_pass: permets de spécifier l’adresse du serveur proxy. http://localhost/. Si le site est accessible via un port autre que le port 80 vous devez spécifier l’adresse du site suivie du port Ex : http://localhost:8080.AUTHENTIFICATION
Pour demander à l’utilisateur d’entre un login et un mot de passe pour avoir accès à une ressource (avant tout chargement du code dans le répertoire).
Pour cela, choisir un chemin qui sera protégé par notre code. (ex: /admin ou /wp-admin comme sur WordPress).
Pour commencer, nous allons installer l’outil apache2-utils qui va nous permettre de créer le fichier de configuration pour l’authentification. Pour créer un fichier caché (.htpasswd) dans le répertoire /data/wordpress/, avec un utilisateur appelez Joel (possibilité d’avoir plusieurs utilisateurs différents dans le même fichier) utiliser la commande :
sudo htpasswd -c /data/wordpress/.htpasswd joelPour ajouter des utilisateurs à un fichier existant, utilisez la commande :
sudo htpasswd /data/wordpress/.htpasswd joelSi vous passez en paramètre le nom d’un utilisateur qui existe déjà, le mot de passe de ce dernier sera mis à jour.
Maintenant, ajouter les lignes suivantes dans le virtual host (dans le fichier de configuration de votre site web). Ajoutez les dans les balises location de votre choix afin de protéger un chemin en particulier (se chemin peut être le /). Dans mon cas je l’ajoute sur le chemin /admin
location /admin/ { root /var/www/mywebsite.com/admin; index index.html index.htm; auth_basic "Restricted"; #For Basic Auth auth_basic_user_file /data/wordpress/.htpasswd; #For Basic Auth }
Cette configuration est à adapter à votre configuration réelle.
Ensuite, vérifier les configurations de nginx :
nginx -trechargé ensuite les configurations si tout est correct :
Service nginx reloadQuand vous essayez d’accéder à l’adresse qui a été spécifiée, vous aurez cette page d’authentification. La forme de la page d’authentification dépend bien sûr de votre navigateur :
vhosts
Les hôtes virtuels permettent à Nginx de gérer plusieurs arborescences Web en simultanées. Si vous regardez dans le dossier
conf.dvous remarquerez que vous n’avez pour le moment qu’une configuration qui est la configuration par défaut.server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
Dans notre cas nous souhaitons faire pointer
monsupersite.frvers notre serveur, nous allons devoir créer un nouveau virtual host :server { listen 80; server_name monsupersite.fr; # Les urls commençant par / (toutes les urls) location / { root /home/dev/www; index index.html index.htm; try_files $uri $uri/ $uri.html =404; } # Les urls contennant /. (dotfiles) location ~ /\. { deny all; access_log off; log_not_found off; } # On va placer les logs dans un dossier accessible error_log /home/dev/logs/error.log; access_log /home/dev/logs/acess.log; # Les pages d'erreurs error_page 404 500 501 /error.html; } server { # On redirige les www. vers la version sans www listen 80; server_name www.monsupersite.fr; return 301 http://monsupersite.fr$request_uri; }
Une fois ces modifications effectuées il ne faut pas oublier de recharger la configuration en redémarrant nginx.
# Pour tester la configurationsudo nginx -t# Pour recharger la configurationsudo service nginx restartPermissions des dossiers
Create a new user other than root, and add it to the www-data group.Set the ownership of /var/www to the www-data user and www-data group.Directories 775Files 664This means that:
The user owner of the directory (www-data) can read, write and execute.
The assigned group (www-data, where my user is) can read and execute, but not write.
Everyone else can read and execute, but not write.
To edit files from FTP require allowing the group to write adjusting the permissions like this:
CONFIGURATION
LOCATION
location [mode] match { ... }
matchpermet de dire que le schéma rencontré dans l’URL permet d’activer la location.Si
modeest du style~ou~*, alors ce sera une regex (*pour insensible à la casse).Si
modeest du style=, alors ce sera la valeur exacte.exemple:
server { listen 80; server_name toto location / { root /var/www/html; index index.html index.htm; } }
Pour toutes pages du genre 505 504 503 etc :
error_page 500 502 503 504 /50x.html; location = /50x.html {
Toutes les images :
location ~ .(png|gif|ico|jpg|jpeg)$ { ... }
ERREURS
si 502 Bad Gateway
il faut bien commenter la ligne
#fastcgi_pass 127.0.0.1:9000;
et dé-commenter la ligne :
fastcgi_pass unix:/var/run/php5-fpm.sock;