title: ubuntu配置nginx+php及优化
date: 2016-04-22 05:41:32
tags: ubuntu
toc: true
修改服务器名称
如果只是一台服务器,设置不设置都行.
一般来讲,主机名根据服务器数量进行编号
修改主机名
vi /etc/hostname
例如修改成
web1
记得吧服务器重启下,以便生效.
这样子连接上服务器左边就显示成
root@web1:~#
修改服务器端口
默认端口是22 至于为什么修改端口 就不在这BB了 vim /etc/ssh/sshd_config
找到Port 22 修改为其他端口 例如 Port 9876
记得吧服务器重启下,以便生效.重启命令reboot
使用新设定端口连接服务器,连接成功你会发现 主要名也生效了 >
安装软件
Ubuntu安装软件挺简单的啊apt-get
就完事了,但是在安装软件之前要更新源.
常用操作
更新源
apt-get updata
更新源的作用
你的源不更新的话,下载的PHP是5.3的地址,apt-get install php
就是5.3 版本的
更新源之后 在去安装 就是 这个系统 最新的稳定版 php版本
更新软件
apt-get dist-upgrade
这个是更新软件 更新系统中所有的软件
在执行这个命令之前 要apt-get update 更新源 源更新之后再更新软件
就是把系统所有软件 更新成本系统的 最新版
心得
服务器越小越好 把自己经常用的软件 装成最新的就行了 lnmp 最新就行了
其他的更新 不会有什么不好 但是肯定会多占用内存和空间
为什么要使用apt-get去安装软件,而不是源码包编译安装,
如果我是使用的源码包编译安装的软件,
软件出现漏洞,我们去为这个漏洞打补丁会很麻烦,
如果我们是使用的apt-get,
同样我们只需要更新这个软件问题就解决了.
安装软件的方法
apt-get install curl
apt-get install wget
apt-get install mcrypt
apt-get install openssl
大概都是这样子安装的.
一次性安装
apt-get install curl wget mcrypt opensll
大概格式apt-get 软件名 软件名 软件名 软件名
这样子是不是就很方便啊~
安装nginx
apt-get install nginx
执行命令自动安装完成 , 自动出现这个目录 /etc/nginx
查看配置文件 /etc/nginx/nginx.conf
vim /etc/nginx/nginx.conf
set nu
显示行号,看起来舒服点.
大概70行的地方,这里是加载配置文件的
include /etc/nginx/conf.d/*.conf;
#主机配置地址,用于绑定域名等等
include /etc/nginx/sites-enabled/*;
include 两个文件夹 conf.d
放的是nginx
的配置,在加载顺序上 conf.d
里面的配置在最下面,他会覆盖原有配置文件里面的配置,如果我们需要去修改配置,要在conf.d里面修改,而不是直接取改配置文件,这样就算改错了也能恢复. sites-enabled
是虚拟机主机配置文件,我们去添加一个站点的不会再nginx.conf
里面进行修改,当然也不会再sites-enabled里面,而是在sites-available
文件夹里面,添加完成之后软连接进sites-enabled
文件夹里面
显然
现在访问服务器的IP,就可以看到
Welcome to nginx!
现在我们还没有配置php呢。
安装php
apt-get install php5
apt-get install php5-fpm
就这样子就执行好了.也就安装完了.
写一个php文件先,一会就可以配置nginx了
nginx的站点默认目录/usr/share/nginx/html/
vim /usr/share/nginx/html/index.php
加入内容
<?php
phpinfo();
?>
ok,现在去看看站点配置文件吧.
打开nginx的站点配置文件
vim /etc/nginx/sites-available/default
默认的配置没有打开php的,下面是经过我注释的配置文件.
- 关于php的配置解除屏蔽了
- 使用了php-fpm
fastcgi_pass 127.0.0.1:9000;
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# www目录
root /usr/share/nginx/html;
# 默认首页
index index.php index.html index.htm;
# 域名 http://localhost/
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # 使用php-fpm
fastcgi_pass 127.0.0.1:9000;
# # 原本下面是默认开启的,因为我们要用php-fpm所以屏蔽了.
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
注意
默认的fastcgi_pass unix:/var/run/php5-fpm.sock;
其实也已经可以解析php文件咯.
如果不用php-fpm的端口监听模式
,解除屏蔽这一句就ok啦.
配置php-fpm
vim /etc/php5/fpm/pool.d/www.conf
把原来的sock监听方式,改成一个ip加端口~
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
重启php5-fpm,使配置文件生效
/etc/init.d/php5-fpm reload
看看9000端口,是不是断开了,证明开启成功没~
netstat -tln
心得
关于nginx的站点配置
location ~ \.php$
~ 指使用正则表达式,匹配。
php-fpm
1.如果是一台专门运行php的服务器,才需要端口监听的模式.listen = 127.0.0.1:9000
否则,其实是有sock速度应该更快,但是实际上,也感觉不出来的.
这里的IP是指运行php服务器的ip,如果是局域网中有专门运行php的服务器,那么这里就填写他的ip.
listen = 127.0.0.1:9000
fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port'
listen.allowed_clients = 127.0.0.1
允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接
安装Xcache,加速下php的运行速度,php7就不需要安装了把~
apt-get install php5-xcache
重新加载php配置文件,使其生效.
service php5-fpm reload
php-fpm优化
修改配置文件
配置文件在这里 /etc/php5/fpm/pool.d/www.conf
http://blog.chedushi.com/archives/8211
https://blog.linuxeye.com/380.html
php-fpm.conf重要优化参数详解
pm = dynamic
pm参数指定了进程管理方式,有两种可供选择:static或dynamic,为静态或动态方式。
静态方式,在php-fpm启动的时候就创建了指定数目的进程,在运行过程中不会再有变化(并不是真的就永远不变)
动态方式,在运行过程中动态调整,当然并不是无限制的创建新进程,受pm.max_spare_servers参数影响;
动态适合小内存机器,灵活分配进程,省内存。静态适用于大内存机器,动态创建回收进程对服务器资源也是一种消耗
pm.max_children = 24
static模式下创建的子进程数或dynamic模式下同一时刻允许最大的php-fpm子进程数量
pm.start_servers = 16
动态方式下的起始php-fpm进程数量
pm.min_spare_servers = 12
动态方式下服务器空闲时最小php-fpm进程数量
pm.max_spare_servers = 24
动态方式下服务器空闲时最大php-fpm进程数量
一般php-fpm进程占用20~30m左右的内存就按30m算。如果单独跑php-fpm,动态方式起始值可设置物理内存Mem/30M,由于大家一般Nginx、MySQL都在一台机器上,于是预留一半给它们,即php-fpm进程数为$Mem/2/30。
LNMP在一台机器上参数(仅供参考,建议压力测试得出):
Mem=`free -m | awk '/Mem:/{print $2}'` #我的机器内存是987M
sed -i "s@^pm.max_children.*@pm.max_children = $(($Mem/2/20))@" $php_install_dir/etc/php-fpm.conf
sed -i "s@^pm.start_servers.*@pm.start_servers = $(($Mem/2/30))@" $php_install_dir/etc/php-fpm.conf
sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = $(($Mem/2/40))@" $php_install_dir/etc/php-fpm.conf
sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = $(($Mem/2/20))@" $php_install_dir/etc/php-fpm.conf
987M内存:
pm = dynamic
pm.max_children = 24
pm.start_servers = 16
pm.min_spare_servers = 12
pm.max_spare_servers = 24
上面的是一个自动计算的脚本~$php_install_dir/etc/php-fpm.conf
这里替换为你php-fpm.conf的路径,或者带有有上述参数的配置文件就可以啦,然后就会自动替换参数.下面还有更简单的办法.
发现一种比较方便的计算方法~
生成一个文件
vim 1.conf
加入内容
这里的内容随意就行了.无所谓.
pm = dynamic
pm.max_children = 24
pm.start_servers = 16
pm.min_spare_servers = 12
pm.max_spare_servers = 24
自动计算最优参数
这里的/root/1.conf
是我前面保存好的.
Mem=`free -m | awk '/Mem:/{print $2}'`
sed -i "s@^pm.max_children.*@pm.max_children = $(($Mem/2/20))@" /root/1.conf
sed -i "s@^pm.start_servers.*@pm.start_servers = $(($Mem/2/30))@" /root/1.conf
sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = $(($Mem/2/40))@" /root/1.conf
sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = $(($Mem/2/20))@" /root/1.conf
执行起来吧,然后打开 1.conf
,看看里面内容是不是改变了.那就按照这个改吧!.
这是我机器计算出来的结果
我的内存有有 1984M
pm = dynamic
pm.max_children = 49
pm.start_servers = 33
pm.min_spare_servers = 24
pm.max_spare_servers = 49
再简单一点吧.
获取系统总内存
执行完成得到系统的总内存.free -m | awk '/Mem:/{print $2}'
这里记录为 $Mem,总内存.
根据算法计算
$Mem = $Mem / 2;
pm.max_children = $Mem / 20
pm.start_servers = $Mem / 30
pm.min_spare_servers = $Mem /40
pm.max_spare_servers = $Mem /20
一般php-fpm进程占用20~30m左右的内存就按30m算。
如果单独跑php-fpm,动态方式起始值可设置物理内存Mem/30M,
由于大家一般Nginx、MySQL都在一台机器上,于是预留一半给它们,即php-fpm进程数为$Mem/2/30。
负载测试 Apache JMeter
这里下载 http://jmeter.apache.org/
参考资料等等
http://www.ltesting.net/ceshi/open/kyxncsgj/jmeter/
打开这个软件
在windows环境下,打开jmeter解压目录,bin目录下的jmeter.bat文件,也就是jmeter程序的启动文件
其他
看看有几个核心
cat /proc/cpuinfo | grep processor
将nginx.conf文件中work_processes的值设置为机器的处理器核数。
nginx的站点配置
pathinfo模式配置
php.ini中cgi.fix_pathinfo
设置为生效,cgi.fix_pathinfo=1
nginx中站点配置
查看进程数量
ps aux | grep -c php-fpm
php-gd库
api-get php-gd
记得重启服务器 reboot
记得重启服务器 reboot
记得重启服务器 reboot
nginx
nginx 查看运行状态
location /ngx_status
{
stub_status on;
access_log off;
#allow 127.0.0.1;
#deny all;
}
查看状态
访问 http://127.0.0.1/ngx_status
Active connections: 63
server accepts handled requests
6263 6263 397145
Reading: 0 Writing: 2 Waiting: 61
nginx status 里面的意思
活跃的连接数量
Active connections: 63
总共处理了6263
个连接 , 成功创建6263
次握手, 总共处理了397145
个请求
server accepts handled requests ``
6263 6263 397145
Reading
- reading — 读取客户端的连接数.
- writing — 响应数据到客户端的数量
- waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading+writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.
Reading: 0 Writing: 2 Waiting: 61
修改用户进程可打开文件数限制
ulimit -n
我服务器结果是65535
在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,
每个socket句柄同时也是一个文件句柄)。
nginx
nginx 配置解析php,支持pathinfo模式的
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}