nginx fpm配置,nginxfpm


Nginx配置和优化提示和技巧

1. - Nginx配置文件

通常,Nginx配置文件位于/ etc / nginx路径下。

/etc/nginx/nginx.conf
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/

2. - 确定Nginx worker_processes和worker_connections

worker_processes和worker_connections的默认设置是可以的,但是这些值可以稍微优化:

max_clients = worker_processes * worker_connections

只是Nginx的基本设置可以处理数百个并发连接:

worker_processes  1;
worker_connections  1024;

通常,1000个并发连接/每个服务器是好的,但有时服务器上的其他部分(如磁盘)可能很慢,导致Nginx在I / O操作上被锁定。为了避免锁定使用示例,请遵循以下设置:一个worker_precess /每个处理器核心,如:

worker_processes [number of processor cores];

要检查您有多少处理器内核,请运行以下命令:

cat /proc/cpuinfo |grep processor
processor   : 0
processor   : 1
processor   : 2
processor   : 3

所以这里有4个核心,而worker_processes的最终设置如下:

worker_processes 4;

本人坚持使用1024个工作人员连接,因为我没有任何理由提高此值。但是,如果每秒4096个连接的连接数不足,那么可以尝试将这个连接数增加一倍,并为每个进程设置2048个连接。

worker_connections 1024;

我已经看到一些配置,其中服务器管理员使用太多Apache,并认为如果我将Nginx worker_processes设置为50,将worker_connections设置为20000,那么我的服务器可以处理所有流量,一旦我们每月收到…但是,这不是真的。这只是浪费资源,可能会造成一些严重的问题

3. - 隐藏Nginx服务器令牌/隐藏Nginx版本号

这是为了安全起见,隐藏服务器令牌/隐藏Nginx版本号,特别是如果运行一些过时版本的Nginx。这很简单,只需在http / server / location部分设置server_tokens,如:

server_tokens off;

4. - Nginx请求/上传最大正文大小(client_max_body_size)

如果您想允许用户上传某些内容或通过HTTP上传个人信息,那么您应该可以增加大小。它可以通过在http / server / location部分下的client_max_body_size值来完成。默认值为1 Mb,但可将其设置为20 Mb,并通过以下配置增加缓冲区大小:

client_max_body_size 20m;
client_body_buffer_size 128k;

如果您收到以下错误,那么您知道client_max_body_size太低:
“Request Entity Too Large” (413)

5. - 静态文件的Nginx缓存控制(浏览器缓存控制指令)

如果要保存资源和带宽,则浏览器缓存是导入的。使用Nginx可以轻松设置,以下是非常基本的设置,其中记录(访问日志和未找到的日志)已关闭,过期标题设置为360天。

location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
如果您想要更复杂的标题或其他文件过期,那么您可以单独配置它们。

6. - Nginx将PHP请求传递给PHP-FPM

这里可以使用默认的tpc / ip栈或直接使用Unix套接字连接。您还必须设置PHP-FPM听完全相同的ip:port或unix套接字(使用Unix套接字,套接字权限必须正确)。默认设置是使用ip:port(127.0.0.1:9000),你当然可以更改ips和ports什么PHP-FPM监听。这是非常基本的配置与Unix套接字的例子注释掉了:

location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9000;
    #fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
}

另外还可以一台服务器运行PHP-FPM另一台服务器运行Nginx。

7. - 使用Nginx防止(拒绝)访问隐藏的文件

很常见的是,服务器根目录或其他公共目录具有隐藏文件,以.开头,通常这些不是站点用户。公共目录可以包含版本控制文件和目录,如.svn,一些IDE属性文件和.htaccess文件。拒绝访问并关闭所有隐藏文件的日志记录。

location ~ /\. {
    access_log off;
    log_not_found off; 
    deny all;
}

PHP-FPM配置提示和技巧

1. - PHP-FPM配置文件

通常,PHP-FPM配置文件位于/etc/php-fpm.conf文件和/etc/php-fpm.d路径上。这通常是很好的开始,所有的池配置去/etc/php-fpm.d目录。您需要在php-fpm.conf文件中添加以下include行:

include=/etc/php-fpm.d/*.conf

2. - PHP-FPM全局配置调整

设置emergency_restart_threshold,emergency_restart_interval和process_control_timeout。这些选项的默认值完全关闭,但我认为最好使用这些选项,如下所示:

emergency_restart_threshold 10
emergency_restart_interval 1m
process_control_timeout 10s

如果10分钟的PHP-FPM子进程在1分钟内退出SIGSEGV或SIGBUS,那么PHP-FPM将自动重启。此配置还为子进程设置10秒的时间限制,以等待来自主机的信号的响应。

3. - PHP-FPM池配置

使用PHP-FPM,可以为不同的站点使用不同的池,并且非常准确地分配资源,甚至可以为每个池使用不同的用户和组。以下只是三个不同站点(或实际上同一站点的三个不同部分)的PHP-FPM池的示例配置文件结构:

/etc/php-fpm.d/site.conf
/etc/php-fpm.d/blog.conf
/etc/php-fpm.d/forums.conf

每个池的示例配置:

/etc/php-fpm.d/site.conf

[site]
listen = 127.0.0.1:9000
user = site
group = site
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-site.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
/etc/php-fpm.d/blog.conf
[blog]
listen = 127.0.0.1:9001
user = blog
group = blog
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-blog.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
/etc/php-fpm.d/forums.conf
[forums]
listen = 127.0.0.1:9002
user = forums
group = forums
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-forums.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

所以这只是一个例子来配置多个不同大小的池。

4. - PHP-FPM池流程管理器(pm)配置

使用PHP-FPM进程管理器的最佳方法是使用动态进程管理,因此PHP-FPM进程只在需要时启动。这与Nginx worker_processes和worker_connections设置几乎相同。所以非常高的配置并不意味着什么都好。每个进程都会记忆,当然如果站点拥有非常高的流量和服务器的内存空间,那么更高的数值就是正确的选择,但像VPS(虚拟专用服务器)内存这样的服务器通常限制在256 Mb,512 Mb,1024 Mb。这个低RAM足以处理甚至非常高的流量(甚至每秒甚至数十个请求)

测试服务器可以容易处理的PHP-FPM进程有多好,首先启动Nginx和PHP-FPM,并加载一些PHP页面,最好是所有最重的页面。然后使用Linux top或htop命令检查每个PHP-FPM进程示例的内存使用情况。我们假设服务器具有512 Mb内存,220 Mb可用于PHP-FPM,每个进程使用24 Mb RAM(一些带有插件的庞大的内容管理系统可以方便地使用20-40 Mb / PHP页面请求甚至更多) 。然后简单地计算服务器max_children值:220/24
= 9.17

这么好的pm.max_children值是9.这只是基于快速平均值,后来当你看到更长的时间内存使用/每个进程时,这可能是别的。在快速测试之后,设置pm.start_servers值,pm.min_spare_servers值和pm.max_spare_servers值更容易。

最终示例配置可能如下:

pm.max_children = 9
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200

默认情况下,每个进程的最大请求是无限制的,但是设置一些低值(如200)并避免一些内存问题是很好的。这种样式设置可以处理大量的请求,即使数字似乎很小。

相关内容

    暂无相关文章