LinuxForum.Fans
Тема

Методы по оптимизации связки nginx + apache.

Автор: u_snif 5 сообщений 6351 просмотров
#22782

Здравствуйте, прошу немного вашей помощи. С nginxом работаю не так давно, но для меня он зарекомендовал себя как стабильный, надёжный, лёгкий и производительный web сервер. Но я не стал полностью отказываться от апача и использую связку nginx + apache (как для безопасности так и для удобств). Собственно прошу вашей в помощи, а точнее советом в плане оптимизации ведущей к ускорению работы данной связки, а так-же отказоустойчивости. Советы нужны во всех планах начиная от настройки ядра до конфигурационных файлов веб сервером и php. Итак, мои текущие конфиги.
nginx.conf:

text

user www-data;
worker_processes  5;

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

worker_rlimit_nofile 80000; events { worker_connections 60000; use epoll; }

http { limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s; limit_zone two $binary_remote_addr 10m;

include /etc/nginx/mime.types;

access_log /var/log/nginx/access.log;

sendfile on; tcp_nopush on;

keepalive_timeout 0; tcp_nodelay on; reset_timedout_connection on; server_tokens off; gzip on;

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

виртуальный хост nginxа:

text

server {

listen 80;

server_name domain;

access_log /home/domain/logs/access.nginx.log;

location / { proxy_pass http://127.0.0.1:81/; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 512k; proxy_connect_timeout 300; proxy_send_timeout 300; limit_req zone=one burst=4; limit_conn two 4; } #error_page 404 /404.html; }

apache2.conf:

text

#
# Based upon the NCSA server configuration files originally by Rob McCool.
#
# This is the main Apache server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See http://httpd.apache.org/docs/2.2/ for detailed information about
# the directives.
#
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
# consult the online docs. You have been warned.  
#
# The configuration directives are grouped into three basic sections:
#  1. Directives that control the operation of the Apache server process as a
#     whole (the 'global environment').
#  2. Directives that define the parameters of the 'main' or 'default' server,
#     which responds to requests that aren't handled by a virtual host.
#     These directives also provide default values for the settings
#     of all virtual hosts.
#  3. Settings for virtual hosts, which allow Web requests to be sent to
#     different IP addresses or hostnames and have them handled by the
#     same Apache server process.
#
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path.  If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so "/var/log/apache2/foo.log"
# with ServerRoot set to "" will be interpreted by the
# server as "//var/log/apache2/foo.log".
#

### Section 1: Global Environment # # The directives in this section affect the overall operation of Apache, # such as the number of concurrent requests it can handle or where it # can find its configuration files. #

# # ServerRoot: The top of the directory tree under which the server's # configuration, error, and log files are kept. # # NOTE! If you intend to place this on an NFS (or otherwise network) # mounted filesystem then please read the LockFile documentation (available # at <URL:http://httpd.apache.org/docs-2.1/mod/mpm_common.html#lockfile>); # you will save yourself a lot of trouble. # # Do NOT add a slash at the end of the directory path. # ServerRoot "/etc/apache2"

# # The accept serialization lock file MUST BE STORED ON A LOCAL DISK. # #<IfModule !mpm_winnt.c> #<IfModule !mpm_netware.c> LockFile /var/lock/apache2/accept.lock #</IfModule> #</IfModule>

# # PidFile: The file in which the server should record its process # identification number when it starts. # This needs to be set in /etc/apache2/envvars # PidFile ${APACHE_PID_FILE}

# # Timeout: The number of seconds before receives and sends time out. # Timeout 300

# # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On

# # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # MaxKeepAliveRequests 100

# # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 15

## ## Server-Pool Size Regulation (MPM specific) ##

# prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule>

# worker MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_worker_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule>

# These need to be set in /etc/apache2/envvars User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP}

# # AccessFileName: The name of the file to look for in each directory # for additional configuration directives. See also the AllowOverride # directive. #

AccessFileName .htaccess

# # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients. # <Files ~ "^\.ht"> Order allow,deny Deny from all </Files>

# # DefaultType is the default MIME type the server will use for a document # if it cannot otherwise determine one, such as from filename extensions. # If your server contains mostly text or HTML documents, "text/plain" is # a good value. If most of your content is binary, such as applications # or images, you may want to use "application/octet-stream" instead to # keep browsers from trying to display binary files as though they are # text. # DefaultType text/plain

# # HostnameLookups: Log the names of clients or just their IP addresses # e.g., www.apache.org (on) or 204.62.129.132 (off). # The default is off because it'd be overall better for the net if people # had to knowingly turn this feature on, since enabling it means that # each client request will result in AT LEAST one lookup request to the # nameserver. # HostnameLookups Off

# ErrorLog: The location of the error log file. # If you do not specify an ErrorLog directive within a <VirtualHost> # container, error messages relating to that virtual host will be # logged here. If you *do* define an error logfile for a <VirtualHost> # container, that host's errors will be logged there and not here. # ErrorLog /var/log/apache2/error.log

# # LogLevel: Control the number of messages logged to the error_log. # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. # LogLevel warn

# Include module configuration: Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf

# Include all the user configurations: Include /etc/apache2/httpd.conf

# Include ports listing Include /etc/apache2/ports.conf

# # The following directives define some format nicknames for use with # a CustomLog directive (see below). # If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i # LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent

# # Define an access log for VirtualHosts that don't define their own logfile CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined

# # Customizable error responses come in three flavors: # 1) plain text 2) local redirects 3) external redirects # # Some examples: #ErrorDocument 500 "The server made a boo boo." #ErrorDocument 404 /missing.html #ErrorDocument 404 "/cgi-bin/missing_handler.pl" #ErrorDocument 402 http://www.example.com/subscription_info.html #

# # Putting this all together, we can internationalize error responses. # # We use Alias to redirect any /error/HTTP_<error>.html.var response to # our collection of by-error message multi-language collections. We use # includes to substitute the appropriate text. # # You can modify the messages' appearance without changing any of the # default HTTP_<error>.html.var files by adding the line: # # Alias /error/include/ "/your/include/path/" # # which allows you to create your own set of files by starting with the # /usr/share/apache2/error/include/ files and copying them to /your/include/path/, # even on a per-VirtualHost basis. The default include files will display # your Apache version number and your ServerAdmin email address regardless # of the setting of ServerSignature. # # The internationalized error documents require mod_alias, mod_include # and mod_negotiation. To activate them, uncomment the following 30 lines.

Alias /error/ "/usr/share/apache2/error/" # # <Directory "/usr/share/apache2/error"> # AllowOverride None # Options IncludesNoExec # AddOutputFilter Includes html # AddHandler type-map var # Order allow,deny # Allow from all # LanguagePriority en cs de es fr it nl sv pt-br ro # ForceLanguagePriority Prefer Fallback # </Directory> # # ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var ErrorDocument 401 /error/401.html ErrorDocument 403 /error/403.html ErrorDocument 404 /error/404.html # ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var # ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var # ErrorDocument 410 /error/HTTP_GONE.html.var # ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var # ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var ErrorDocument 413 /error/413.html # ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var # ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var # ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var # ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var # ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var # ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var # ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

# Include of directories ignores editors' and dpkg's backup files, # see README.Debian for details.

# Include generic snippets of statements Include /etc/apache2/conf.d/

# Include the virtual host configurations: Include /etc/apache2/sites-enabled/

виртуальный хост apache:

text

<VirtualHost *:81>
ServerName domain
ServerAdmin root@domain
DocumentRoot /home/domain/www/
CustomLog /home/domain/logs/access.apache.log combined
ErrorLog /home/domain/logs/error.apache.log
###php config###
php_admin_value open_basedir /home/domain/www
php_admin_value doc_root /home/domain/www
###module###
<IfModule mpm_itk_module>
AssignUserId domain domain
</IfModule>
</VirtualHost>

Заранее признателен.

#22813

.snif,
А в чем проблема-то? И почему до сих пор на главной странице snifer.ru "Server is work"? :D

#22853

Hvzh, не может быть такого smile перенёс 3 дня назад если не больше. Проблемы по большому счёту нету, немного притормаживает на мой взгляд эта связка. На других серверах nginx работает в чистом виде и там сайты которые намного тяжелее просто летают.

#22859

Блин, это гребаный chrome в кеше запомнил. Но грузится реально медленно. Слушай, а зачем такие сложности в виде связки? Почему нельзя оставить либо то, либо другое?

А! Ну, понятно! Нафлудил всякими картинками :)

#23201

Hvzh, и у меня хром smile Ну сложности по большей части для безопасности, т.к. у меня виртуальные хосты апача из-под разных пользователей работает... В принципе можно и чисто на nginx запустить, но я просто не понимаю поучим так медленно работает... хотя через сервисы тестирования показывает, что страница грузится за 1,5 сек

Войдите или зарегистрируйтесь, чтобы ответить.