# 修改服务器名称 如果只是一台服务器,设置不设置都行. 一般来讲,主机名根据服务器数量进行编号 ## 修改主机名 `vi /etc/hostname` ### 例如修改成 `web1` ### 记得吧服务器重启下,以便生效. ### 这样子连接上服务器左边就显示成 `root@web1:~#` ## 修改服务器端口 默认端口是22 至于为什么修改端口 就不在这BB了 `vim /etc/ssh/sshd_config` 找到Port 22 修改为其他端口 例如 Port 9876 记得吧服务器重启下,以便生效.重启命令`reboot` 使用新设定端口连接服务器,连接成功你会发现 主要名也生效了 > # 安装软件 Ubuntu安装软件挺简单的啊`apt-get`就完事了,但是在安装软件之前要更新源. ## 常用操作 ### 更新源 `apt-get update` #### 更新源的作用 你的源不更新的话,下载的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; } ```