@murmuringvoices
Звукорежиссер

Что бы вы посоветовали поменять в таком конфиге NGINX?

Учусь настраивать NGINX, подскажите, что бы вы посоветовали добавить/убрать/изменить в таком конфиге?

Одно ядро, 768мб памяти, сервер в основном будет раздавать статический html с картинками, возможно через какое-то время подключу бэкенд PHP7.0-FPM. Но под раздачу небольшой статики что тут еще по-вашему можно оптимизировать?

nginx.conf
user www-data;
worker_processes 2;

error_log  /var/log/nginx/error.log crit;
pid /run/nginx.pid;

worker_rlimit_nofile 16384;

timer_resolution 100ms;

worker_priority -5;

events {
	worker_connections 4096;
	multi_accept on;
	use epoll;
}

http {
	sendfile on;
	sendfile_max_chunk 512k;
	tcp_nopush on;
	tcp_nodelay on;
	types_hash_max_size 2048;
	server_tokens off;

#	access_log  /var/log/nginx/access.log  main;
	access_log off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	gzip on;
	gzip_disable "msie6";
	gzip_vary on;
	gzip_proxied any;
	gzip_comp_level 5;
	gzip_buffers 16 8k;
	gzip_http_version 1.1;
	gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
	gzip_min_length 256;

	client_body_buffer_size 16K;
	client_header_buffer_size 1k;
	client_max_body_size 4m;
	large_client_header_buffers 2 2k;
	client_body_timeout 16;
	client_header_timeout 16;

	open_file_cache max=16384 inactive=20s;
	open_file_cache_valid 60s;
	open_file_cache_min_uses 2;
	open_file_cache_errors on;

	keepalive_timeout 120;
	keepalive_requests 1024;
	send_timeout 2;

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


server
server {
	listen 80;
	listen [::]:80;

	server_name domain.com www.domain.com;
	server_tokens off;

	return 301 https://domain.com$request_uri;
}

server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;

	server_name www.domain.com;
	server_tokens off;

	ssl_certificate /etc/nginx/1234/12345.pem;
	ssl_certificate_key /etc/nginx/1234/12345.key;
	ssl_session_timeout 12h;
	ssl_session_cache builtin:2048 shared:SSL:10m;
	ssl_session_tickets on;

	ssl_dhparam /etc/nginx/1234/dh.pem;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
	ssl_prefer_server_ciphers on;

	ssl_stapling on;
	ssl_stapling_verify on;
	ssl_trusted_certificate /etc/nginx/1234/ca-certs.pem;
	resolver 8.8.8.8 8.8.4.4 valid=300s;
	resolver_timeout 5s;

	add_header Strict-Transport-Security max-age=15552000;
	add_header X-Frame-Options SAMEORIGIN;
	add_header X-Content-Type-Options nosniff;
	add_header X-XSS-Protection "1; mode=block";
	add_header Public-Key-Pins 'pin-sha256="ZaeC7aDCKHf5PSdQFunx5hcO9byyJRD2OXDiAjGHa9M="; pin-sha256="m/CdGXPW3bzy+HkDHIG/E/gyTXXOcw7HlwITZWOzJ4Y="; max-age=604800';

	return 301 https://domain.com$request_uri;
}

server {
	listen 443 ssl http2 default_server;
	listen [::]:443 ssl http2 default_server;

	server_name domain.com;
	server_tokens off;

	ssl_certificate /etc/nginx/1234/12345.pem;
	ssl_certificate_key /etc/nginx/1234/12345.key;
	ssl_session_timeout 12h;
	ssl_session_cache builtin:2048 shared:SSL:10m;
	ssl_session_tickets on;

	ssl_dhparam /etc/nginx/1234/dh.pem;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
	ssl_prefer_server_ciphers on;

	ssl_stapling on;
	ssl_stapling_verify on;
	ssl_trusted_certificate /etc/nginx/1234/ca-certs.pem;
	resolver 8.8.8.8 8.8.4.4 valid=300s;
	resolver_timeout 5s;

	add_header Strict-Transport-Security max-age=15552000;
	add_header X-Frame-Options SAMEORIGIN;	add_header X-Content-Type-Options nosniff;
	add_header X-XSS-Protection "1; mode=block";
	add_header Public-Key-Pins 'pin-sha256="ZaeC7aDCKHf5PSdQFunx5hcO9byyJRD2OXDiAjGHa9M="; pin-sha256="m/CdGXPW3bzy+HkDHIG/E/gyTXXOcw7HlwITZWOzJ4Y="; max-age=604800';

	client_body_buffer_size  10K;
	client_header_buffer_size 10k;
	client_max_body_size 10m;
	large_client_header_buffers 2 10k;

	root /var/www/html;

	index index.html index.htm;

	rewrite ^/(.+)/$ /$1 permanent;

	location / {
		try_files $uri $uri.html $uri/ =404;
	}

	location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
		expires 24d;
		access_log off;
		log_not_found off;
	}

	location ~* ^.+\.(js|css)$ {
		expires 7d;
		access_log off;
		log_not_found off;
	}

	#location ~ \.php$ {
	#	include snippets/fastcgi-php.conf;
	#
	#	# With php5-cgi alone:
	#	fastcgi_pass 127.0.0.1:9000;
	#	# With php5-fpm:
	#	fastcgi_pass unix:/var/run/php5-fpm.sock;
	#}
}
  • Вопрос задан
  • 1900 просмотров
Решения вопроса 2
sim3x
@sim3x
Всё работает

-Доктор, посмотрите на мой член!
-член как член...
-Нет, доктор, вы посмотрите какой красавец!!!


хороший конфиг, заумный, с кучей оптимизаций под непонятно какие задачи и для какого железа
Хороший вобщем

разве что резолвер не стоит отдавать на откуп nginx
Лучше настроить приватный резолвер из https://en.wikipedia.org/wiki/Comparison_of_DNS_se...
resolver 8.8.8.8 8.8.4.4 valid=300s;
  resolver_timeout 5s;

тем более что его роль в данном конфиге непонятна

И include /etc/nginx/sites-enabled/*; непонятно зачем
И не указано для какой версии конфиг
Ответ написан
@xtreme
Снимаю порчу по SSH :)
Прочитал комментарии - фигней вы занимаетесь. Конкретная задача есть? Если нет - тогда к чему сотрясать клавиатуру, накидывая конфиг?
Есть такое понятие - "преждевременная оптимизация". Вам почти любой, кто с этим сталкивался, скажет, что преждевременная оптимизация - это плохо.
Как сказал Игорь Сысоев в одном из докладов - "Фактически настройка nginx сводится к выставлению worker_processes в число железных ядер на машине, или в auto, а дальше надо заниматься тюнингом самой системы".
С моей колокольни, обычно первоначальная настройка выглядит так:
В nginx.conf
worker_processes auto;
worker_rlimit_nofile 65535;
worker_connections 65535;
accept_mutex off;


А потом в conf.d описываем первый виртхост с минимальным конфигом...
Запустили что надо в минимальной конфигурации, посмотрели на все это дело и уже только потом тюнить - включить gzip где надо, выставить опции к сокетам (включая http2, куда ж без него :-) ), выключение sendfile, где не надо, включение aio, где надо, включение thread-pool если ситуация требует, выкручивание буферов в крайних случаях.

По вашему конфигу - портянка получилась еще и потому, что многие опции дублированы в разных server, хотя можно было их вынести выше в секцию http, ssl-опции можно также почти полностью вынести в секцию http (в вашем случае можно вообще некоторые опустить).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы