ubuntu配置nginx+php及优化

简介: 乌邦图的是如何玩耍的

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的,下面是经过我注释的配置文件.

  1. 关于php的配置解除屏蔽了
  2. 使用了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;
}
目录
相关文章
|
27天前
|
存储 缓存 搜索推荐
优化PHP数组性能
优化PHP数组性能
40 8
|
26天前
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
52 3
|
29天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
45 2
|
2月前
|
网络协议 Ubuntu 网络安全
|
2月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
93 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
2月前
|
资源调度
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
42 2
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
|
2月前
|
Ubuntu PHP 开发者
如何在Ubuntu中切换多个PHP版本
通过上述步骤,您不仅能够高效地在Ubuntu系统中安装和切换PHP版本,还能根据项目需求灵活配置,大大提升开发效率与灵活性。更多关于服务器配置与优化的信息,获取全面的技术支持与解决方案。
62 1
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
389 3
|
2月前
|
tengine 应用服务中间件 Linux
Tengine、Nginx安装PHP命令教程
要在阿里云Linux上安装PHP,请先更新YUM源并启用PHP 8.0仓库,然后安装PHP及相关扩展。通过`php -v`命令验证安装成功后,需修改Nginx配置文件以支持PHP,并重启服务。最后,创建`phpinfo.php`文件测试安装是否成功。对于CentOS系统,还需安装EPEL源和Remi仓库,其余步骤类似。完成上述操作后,可通过浏览器访问`http://IP地址/phpinfo.php`测试安装结果。
|
3月前
|
设计模式 算法 数据库连接
PHP中的设计模式:如何优化你的代码结构
在本文中,我们将深入探讨PHP中的设计模式。设计模式是解决常见软件设计问题的最佳实践。它们不是具体的代码,而是一种编程经验的总结。掌握设计模式可以帮助你写出更高效、灵活和可维护的代码。本文将介绍几种常见的设计模式,并通过示例展示如何在PHP项目中应用这些模式。无论你是PHP初学者还是有经验的开发者,都能从本文中获得启发和实用的技巧。