Nginx används som webbserver av mer än 60% av världens top 100,000 hemsidor. Men Nginx kan vara mycket mer än bara en webbserver. Ett litet urval vad Nginx kan användas som:
- Reverse proxy
- Load balancer
- HTTP Cache
- RTMP Server
Installation
#tab1|CentOS 7 #tab2|Ubuntu 16.04
Börja med att installera epel-repot:
Installera Nginx:
Starta Nginx:
Gör så Nginx startar automatiskt vid reboot:
Lägg till firewalld regler om det behövs.
yum install epel-release:
yum install nginx
systemctl start nginx
systemctl enable nginx.service
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
Installera Nginx:
Kolla så Nginx körs:
Kommandon
=========
- Testa om det är en giltig konfiguration innan man startar om
nginx:`nginx -t`
- Ladda om confen utan att starta om nginx:`nginx -s reload`
Konfiguration
=============
Reverse Proxy
-------------
Nginx fungerar utmärkt som en reverse proxy för webbtrafik.
Exempel
` proxy_pass `[`http://10.0.0.10:3000`](http://10.0.0.10:3000)`;`
Rewrite & Redirect
------------------
### Tabort www
Om man inte vill ha www i sin URL så skapar man 2 servrar som man sedan
kör en redirect till.
### Redirect HTTP till HTTPS
Här behöver man också skapa 2st server delar.
### Redirect HTTP till HTTPS, ej standardport
Nginx har en egen HTTP-statuskod för detta.
` error_page 497 `[`https://$host:1234$request_uri`](https://$host:1234$request_uri)`;`
HTTPS
-----
Konfigurationsexempel med säkerhet i fokus.
[`https://syslink.pl/cipherlist/`](https://syslink.pl/cipherlist/)
Generera DH-parametrar med tidtagning. Det tar lång tid!
### Nyckelsäkerhet
Av säkerhetsskäl bör endast root har rätt att läsa de privata nycklarna.
Nginx processer fungerar default enligt:
- 1 nginx master process körs som root
- x nginx workers körs som www-data
Nginx master process läser SSL-nycklarna, inte worker-processerna.
Därför fungerar det utmärkt att köra följande.
### SPDY
SPDY är ett protokoll utvecklat av Google för att göra
HTTPS-handskakning lite snabbare. Alla moderna webbläsare har stöd för
det.
Din nginx måste vara kompilerad med –with-http_spdy_module.
RTMP
----
Nginx rtmp modul fungerar utmärkt om man vill kunna streama något till 2
platser samtidigt tex till Twitch och Hitbox utan att behöva ha igång 2
instanser av tex OBS/Xsplit.
För att få in RTMP modulen så måste man compilera nginx från början.
Hämta hem senaste versionen av nginx och rtmp modulen.
`wget `[`http://nginx.org/download/nginx-1.7.9.tar.gz`](http://nginx.org/download/nginx-1.7.9.tar.gz)
`wget `[`https://github.com/arut/nginx-rtmp-module/archive/master.zip`](https://github.com/arut/nginx-rtmp-module/archive/master.zip)
Packa upp filerna
Lägg sedan till rtmp modulen i nginx.
Om du inte fått några error så är nginx med rtmp modulen installerade.
Ändra och lägg till följande rader i din conf fil.
` push `[`rtmp://live-ams.twitch.tv/app/live_XYZ_ZXY`](rtmp://live-ams.twitch.tv/app/live_XYZ_ZXY)`;`
` push `[`rtmp://live.hitbox.tv/push/username?key=XYZ`](rtmp://live.hitbox.tv/push/username?key=XYZ)`;`
För att starta nginx server skriv
För att stoppa nginx servern.
Ställ in din klient att streama mot /stream
PHP
---
För att kunna visa PHP sidor behövs PHP-FastCGI.
`wget -O /usr/bin/php-fastcgi `[`http://www.linode.com/docs/assets/1548-php-fastcgi-deb.sh`](http://www.linode.com/docs/assets/1548-php-fastcgi-deb.sh)` && chmod +x /usr/bin/php-fastcgi`
`wget -O /etc/init.d/php-fastcgi `[`http://www.linode.com/docs/assets/1549-init-php-fastcgi-deb.sh`](http://www.linode.com/docs/assets/1549-init-php-fastcgi-deb.sh)` && chmod +x /etc/init.d/php-fastcgi && update-rc.d php-fastcgi defaults`
Lägg till följande i din conf fil.
skapa en php info fil i din rooten på webbservern för att testa din php
conf.
Naxsi
-----
Third party Nginx-modul, motsvarighet till
[ModSecurity](ModSecurity.md). Går att köra i learning mode.
Tips n Trix
===========
Fail2ban
--------
Enable directory listing
------------------------
Om du vill att nginx ska lista filerna i en mapp som inte har någon
index fil. Lägg följande under `location` som du vill lista.
Rate Limit
----------
Man kan begränsa bandbredden för en viss IP eller subnät.
apt-get update
apt-get -y install nginx
systemctl status nginx
server {
listen 80;
server_name sub.domän.se;
location / {
include /etc/nginx/proxy_params;
}
}
server {
listen 80;
server_name domän.se;
}
server {
listen 80;
server_name www.domän.se;
return 301 $scheme://domän.se$request_uri;
}
server {
listen 80;
server_name domän.se;
return 301 https://domän.se$request_uri;
}
server {
listen 443 ssl;
# let the browsers know that we only accept HTTPS
add_header Strict-Transport-Security max-age=2592000;
}
server {
listen 1234 ssl;
server_name sub.domän.se;
...
...
}
server {
listen 443 ssl;
server_name secure.domän.se;
add_header Strict-Transport-Security max-age=15768000;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!DSS:!RC4';
ssl_prefer_server_ciphers on;
ssl_dhparam /path/to/dhparam.pem;
...
}
time openssl dhparam -out /path/to/dhparam.pem 4096
sudo chown root:root certificate.key
sudo chmod 400 certificate.key
nginx -V
sudo sed -i -r 's/listen 443 ssl/listen 443 ssl spdy/g' /etc/nginx/sites-available/dinSSLsite
sudo service nginx reload
apt-get update && apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
tar -zxvf nginx-1.7.9.tar.gz
unzip master.zip
cd nginx-1.7.9
./configure --add-module=../nginx-rtmp-module-master
make
make install
/usr/local/nginx/conf/nginx.conf
rtmp {
server {
listen 1935;
chunk_size 8192;
application stream {
live on;
meta copy;
}
}
}
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s
apt-get install php5-cli php5-cgi spawn-fcgi php-pear
/etc/init.d/php-fastcgi start
location ~* \.php$ {
include fastcgi_params;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
echo "<?php phpinfo(); ?>" > info.php
sudo apt-get install nginx-naxsi
sudo nano /etc/fail2ban/jail.conf
[nginx-http-auth]
enabled = true
autoindex on;
location / {
if ( $remote_addr ~* 192.100.20.0/24 ) {
limit_rate 5k;
}
}