nginx (engine x) — it is a web server and reverse proxy server, as well as a mail proxy server.
Install on Ubuntu with the command:
sudo apt-get install nginx
You can completely remove it as follows:
sudo apt purge nginx nginx-common nginx-core
Standard directory for www files – /usr/share/nginx/www or /var/www/html.
After installation, edit the configuration file /etc/nginx/nginx.conf according to your needs.
Below I will describe some of the parameters of the standard configuration file.
The user on whose behalf nginx is running:
user www-data;
The number of workflows. The optimal value depends on many factors, the number of processor cores, hard drives, load. auto – set automatically. I set equal to the number of cores of a single processor:
worker_processes 4;
The file in which the main process number (PID) will be stored:
pid /var/run/nginx.pid;
Number of connections per process:
worker_connections 1768;
If disabled, the workflow will accept only one new connection at a time; otherwise, all:
multi_accept on;
Enable or disable sendfile:
sendfile on;
When enabled, allows you to send the response header and the beginning of the file in one package, transfer the file in full packages:
tcp_nopush on;
Using the TCP_NODELAY parameter. Used when the connection goes into the keep-alive state:
tcp_nodelay on;
The time in seconds during which the keep-alive connection with the client will not be closed by the server:
keepalive_timeout 65;
Maximum size of hash tables of types:
types_hash_max_size 2048;
Whether to display the version of nginx in error messages and in the “Server” field of the response header, I recommend not to show:
server_tokens off;
Basket size in server name hash tables (32|64|128):
server_names_hash_bucket_size 64;
Specifying the port in redirects issued by nginx:
server_name_in_redirect off;
Connect to the mime.types configuration file:
include /etc/nginx/mime.types;
The default MIME type of responses is:
default_type application/octet-stream;
Path, format and log settings:
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
Enables or disables gzip compression of the response:
gzip on;
Disables gzip response compression for requests with “User-Agent” header fields similar to:
gzip_disable "msie6";
Set up gzip response compression for proxied requests:
“off” – is prohibited,
“expired” – compress if there is an “Expires” field in the response header with a value that prohibits caching,
“no-cache” – compress if there is a “Cache-Control” field in the response header with the parameter “no-cache”,
“no-store” – compress if there is a “Cache-Control” field in the response header with the “no-store” parameter,
“private” – compress, if in the response header there is a “Cache-Control” field with the parameter “private”,
“no_last_modified” – compress if there is no “Last-Modified” field in the response header,
“no_etag” – compress if there is no “ETag” field in the response header,
“auth” – compress if there is an “Authorization” field in the request header,
“any” – compress all proxied requests.
gzip_proxied any;
Compression ratio (from 1 to 9):
gzip_comp_level 6;
The number and size of buffers into which the response will shrink:
gzip_buffers 16 8k;
Minimum HTTP version of the request for response compression:
gzip_http_version 1.1;
Compressing the gzip response for specified MIME types in addition to “text/html”. “text/html” is always compressed:
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
Load all configuration files from specified directories:
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*;
Create a file in the /etc/nginx/sites-available/directory with the name of our domain.
I will give an example of the contents of the file as proxy apache2:
server { listen 80; server_name example.com www.example.com; access_log /var/log/nginx.access_log; location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ { root /var/www/example.com/; index index.html index.php; access_log off; expires 30d; } location ~ /\.ht { deny all; } location / { proxy_pass http://127.0.0.1:81/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $remote_addr; proxy_set_header Host $host; proxy_connect_timeout 60; proxy_send_timeout 90; proxy_read_timeout 90; proxy_redirect off; proxy_set_header Connection close; proxy_pass_header Content-Type; proxy_pass_header Content-Disposition; proxy_pass_header Content-Length; } }
Activate the domain (that is, the link to the directory with configs that nginx loads):
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Restart apache2 and nginx:
sudo /etc/init.d/apache2 restart sudo /etc/init.d/nginx restart
Make sure that the web servers are running:
sudo netstat -tulpn | grep nginx sudo netstat -tulpn | grep apache2
To show ip users in logs, and not 127.0.0.1, install:
sudo apt-get install libapache2-mod-rpaf
and add to the end of the apache config:
RPAFenable On RPAFsethostname On RPAFproxy_ips 127.0.0.1 RPAFheader X-Forwarded-For
An example of disabling/enabling nginx autostart when the operating system starts (Ubuntu):
systemctl is-enabled nginx systemctl disable nginx systemctl enable nginx
See also my articles:
Setting up nginx logs
Installing WordPress and Nginx
How to configure IP access in nginx