Nginx
Installation
Ubuntu
sudo apt install -y nginx
RHEL
sudo dnf install -y nginx
Server setup
sudo sed '36a \tinclude /etc/nginx/sites-enabled/*.conf;' nginx.conf
cd /etc/nginx/
sudo mkdir sites-available sites-enabled
HTTP Service
sudo vi /etc/nginx/sites-available/example.com.conf
Full config
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
access_log /var/log/nginx/example-access.log;
error_log /var/log/nginx/example-error.log error;
location / {
proxy_pass http://192.168.0.2:8080;
# Memory efficient
proxy_buffer_size 16k;
proxy_buffers 8 32k; # 8 * 32k buffer.
proxy_busy_buffers_size 64k;
# More smaller response
proxy_buffer_size 128k;
proxy_buffers 256 16k; # 256 * 16k buffer.
proxy_busy_buffers_size 256k;
# Less but larger response
proxy_buffer_size 128k;
proxy_buffers 4 256k; # 4 * 256k buffer.
proxy_busy_buffers_size 256k;
client_max_body_size 250m;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
}
Single proxy server
server {
...
...
location / {
proxy_pass http://192.168.0.2:8080;
}
}
Load balancer
upstream myapplication {
server 192.168.0.2:8080;
server 192.168.0.3:8080;
}
server {
...
...
location / {
proxy_pass http://myapplication;
}
}
Allow specific ip range
sudo tee -a /etc/hosts << EOF
192.168.1.101 example.com
EOF
server {
...
server_name example.com
...
...
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 127.0.0.1;
deny all;
}
}
Change context path
server {
...
...
location / {
proxy_pass http://192.168.0.2:8080;
rewrite ^/(.*)$ /$1 break;
}
}
Update url location from / to /path
server {
...
...
location / {
rewrite ^/$ /path redirect;
proxy_pass http://192.168.0.2:8080;
}
}
server {
...
...
location = / {
rewrite ^/$ /path redirect;
}
location / {
proxy_pass http://192.168.0.2:8080;
}
}
Redirect to another domain for /
server {
...
...
location = / {
return 301 $scheme://example.com/path;
}
location / {
proxy_pass http://192.168.0.2:8080;
}
}
cd /etc/nginx/sites-enabled/
sudo ln -s ../sites-available/example.com.conf example.com.conf
TCP Stream
sudo vi /etc/nginx/sites-available/example.conf
TCP load balancer
stream {
upstream myapp {
server 192.168.0.2:5432;
server 192.168.0.3:5432;
}
server {
listen 5432;
proxy_pass myapp;
proxy_timeout 5m;
proxy_connect_timeout 5m;
}
}
cd /etc/nginx/sites-enabled/
sudo ln -s ../sites-available/example.conf example.conf
Reload
Reload service
sudo nginx -s reload
sudo systemctl restart nginx