Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. <jumbotron> ====== Nginx le serveur WEB ====== [[https://www.freshports.org/www/nginx|nginx]] est un serveur web qui a longtemps été développé sur et pour FreeBSD. </jumbotron> Lorsque vous installerez ce [[https://www.freebsd.org/doc/handbook/ports.html|ports]], consultez bien la longue liste des options. ===== Configuration ===== Toute la configuration ou presque se fait sous ''/usr/local/etc/nginx/nginx.conf'', il n'y a pas de ''sites-available/sites-enable'' comme sous Linux ou comme sous [[https://www.freshports.org/www/apache24|Apache]]. ===== FreeBSD ===== Certains réglages, uniquement (ou presque) valides sous FreeBSD sont à prendre en compte.En premier lieu, demandez à Nginx d'utiliser les kqueue(2). C'est une interface non-bloquante pour écouter les sockets(2) plus performantes que les ancêtres poll(2) ou select(2). <file nginx /usr/local/etc/nginx/nginx.conf> events { worker_connections 1024; use kqueue; } </file> ---- [[http://nginx.org/en/docs/events.html|events du contexte main]]. ==== http core ==== Ceux sont les directives du [[http://nginx.org/en/docs/http/ngx_http_core_module.html|moteur http Nginx]]. * Autorisez les Entrée/Sorties asynchrones, aio(4) et sendfile(2): <file nginx /usr/local/etc/nginx/nginx.conf> http { sendfile on; aio on; } </file> * activez l'option ''TCP_NOPUSH'' des sockets de FreeBSD, pour éviter de pousser de trop petits paquets dans le réseau: <file nginx /usr/local/etc/nginx/nginx.conf> http { tcp_nopush on; } </file> ==== serveur ==== Il s'agit des directives des [[http://nginx.org/en/docs/http/ngx_http_core_module.html|hôtes virtuels de Nginx]]. En particulier la directive ''listen'', qui permet de paramétrer une socket en utilisant par exemple ''http2'' sur ''ssl''. <file nginx /usr/local/etc/nginx/nginx.conf> server { listen [::]:443 ssl http2; … } </file> <note important> Attention, comme toutes les directives qui sont des options appliquées aux sockets, elles ne sont valides et acceptées qu'une seule fois, c'est à dire pour un seul couple //adresse:port//. </note> === Filtres === Le noyau de FreeBSD permet de définir des [[https://www.freebsd.org/cgi/man.cgi?accf_http|filtres]] qui vont vérifier le contenu du flux avant de la passer à une //socket//. ''Nginx'' comprend ''accept_filter=httpready'' et ''accept_filter=dataready''. Assuez vous d'avoir activé les options suivantes dans le noyau: - ACCEPT_FILTER_HTTP - ACCEPT_FILTER_DATA Ou de charger les modules: - accf_http - accf_data Pour pouvoir définir ces filtres derrière la directive ''listen''. === Fast open === Votre serveur peut utiliser le paramètre [[http://en.wikipedia.org/wiki/TCP_Fast_Open|TCP FASTOPEN]] si vous l'avez activé dans votre système. <code bash> sysctl net.inet.tcp.fastopen.server_enable=1 </code> Ajoutez le à une directive ''listen'': <file nginx /usr/local/etc/nginx/nginx.conf> server { listen [::]:443 ssl http2 fastopen=256; … } </file> <note warning> Mais faites attention avec celle là, ne l'activez pas sans raison. </note> ===== Rangement ===== Pour éviter de vous répéter, ou pour ranger vos serveurs dans des fichiers séparés, utiliser la directive ''include''. Par exemple, pour rejeter d'office les requêtes louches: <file nginx /usr/local/etc/nginx/drop.conf> location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } location ~ /\. { access_log off; log_not_found off; deny all; } location ~ ~$ { access_log off; log_not_found off; deny all; } </file> Il suffit ensemble de le préciser dans les serveurs concernés: <file nginx /usr/local/etc/nginx/nginx.conf> server { listen [::]:80 ; listen 80 ; server_name popeye.lapinbilly.eu; root /usr/local/www/popeye; index index.html; include drop.conf; } </file> Vous pouvez de la même manière mettre la configuration d'un serveur dans un fichier à part. ===== Chiffrement ===== Lorsque vous voulez fournir le [[http://nginx.org/en/docs/http/configuring_https_servers.html|protocole HTTPS]], outre le chiffrement en lui même,vous allez devoir demander des certificats à une autorité de certification. La plus connue est [[https://letsencrypt.org/fr/|letsencrypt]], qui est gratuite. Un outil de certification dédié à //Nginx// existe pour cela, [[https://www.freshports.org/security/py-certbot-nginx|certbot-nginx]]. Par contre, pour certains services, il vous faudra un chiffrement plus solide, voici ceux conseillés par [[https://wiki.mozilla.org/Security/Server_Side_TLS|Mozilla]]: <code bash> openssl dhparam -out /usr/local/etc/nginx/dhparam.pem 2048 </code> Que vous allez donner à votre serveur virtuel: <file nginx /usr/local/etc/nginx.conf> server { ssl_dhparam /usr/local/etc/nginx/dhparam.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ecdh_curve X25519:P-521:P-384:P-256; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"; ssl_session_cache shared:SSL:10m; ssl_session_timeout 15m; ssl_session_tickets off; ssl_certificate /usr/local/etc/letsencrypt/live/popeye.lapinbilly.eu/fullchain.pem; ssl_certificate_key /usr/local/etc/letsencrypt/live/popeye.lapinbilly.eu/privkey.pem; </file> <callout type="info" icon="true"> ''TLSv1.3'' est disponible en base sous FreeBSD 12, puisque la version de ssl(3) est au moins ''1.1.1''. \\ TLSV1.1 n'est pas considéré comme sûr. </callout> [[https://www.ssllabs.com/ssltest|Tester le]] ! <note tuyau> Mis à part les certificats, vous pouvez placer ces directives sous ''http'' pour les propager à tous les serveurs. </note> ports/nginx.txt Dernière modification : 2023/06/03 22:26de david