Rootop 服务器运维与web架构

2014-05-27
发表者 Venus
暂无评论

php5.3之后版本配置php-fpm.conf

从php5.3版本开始,php默认已经嵌入了php-fpm的支持,并且php-fpm的配置文件php-fpm.conf 也使用了和php.ini的同样格式。
默认的配置文件中有很多内容,大多都被注释掉了,注意php-fpm.conf 使用 ‘;’ 注释。

  1. [global]
  2. pid = /usr/local/php/var/run/php-fpm.pid
  3. error_log = /usr/local/php/var/log/php-fpm.log
  4. [www]
  5. listen = /tmp/php-fcgi.sock
  6. user = php-fpm
  7. group = php-fpm
  8. pm = dynamic
  9. pm.max_children = 50
  10. pm.start_servers = 20
  11. pm.min_spare_servers = 5
  12. pm.max_spare_servers = 35
  13. pm.max_requests = 500
  14. rlimit_files = 1024

这些已经可以满足大多应用,但是有时候会有一些特殊需求。简单解释一下配置中的各个参数的含义:
首先,配置分为两个部分,第一部分 [global] 为全局配置项,用来定义日志、pid等相关内容。
第二部分[www], 这个为资源池配置项,其中[]内的字符串为自定义内容,我们也可以写成域名,比如 [www.example.com]
这部分内容用来定义,各个域名所使用的资源分配。
1. listen 用来定义该资源池所监听的socket,也可以是tcp形式;
2. user、group用来定义php-fpm以哪个账号和组的身份来运行;
3. pm = dynamic   如何控制子进程,选项有static和dynamic。
如果选择static,则由pm.max_children指定固定的子进程数。
如果选择dynamic,则由以下参数决定:
pm.max_children ,子进程最大数
pm.start_servers ,启动时的进程数

pm.start_servers默认值的公式:min_spare_servers + (max_spare_servers – min_spare_servers) / 2

pm.min_spare_servers ,保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers ,保证空闲进程数最大值,如果空闲进程大于此值,此进行清理
对于专用服务器,pm可以设置为static。

4. pm.max_children 这个选项来定义,最大开启的php-fpm子进程数量,根据机器的硬件配置来定义,如果内存高于4G,设置为200或者以上,如果低于4G,比如1G内存,设置50就可以了

5.  pm.max_requests   设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 ’0′ 则一直接受请求. 设置为500就可以了。

6. rlimit_files = 1024  设置文件打开描述符的rlimit限制.  一般情况下,设置为1024就足够了。

除了这些配置参数外,另外还有几个常用的,那就是sloglog和open_basedir

7. slowlog = log/www.discuz.net.slow  这里定义,slow log的路径,当php脚本执行时间超过 request_slowlog_timeout 值时,会记录slowlog 它用来帮助我们排查程序哪里有问题,提高程序的处理速度。

8. request_slowlog_timeout = 1 php脚本执行超时时间

9. php_admin_value[open_basedir]=/data/www/:/tmp/
这个选项是非常关键的安全选项,把php的执行账号只限定在指定的目录里,这样可以防止网站被入侵后,黑客获取其他站点的文件信息和服务器的某些关键信息。

php-fpm.conf 中可以定义多个 资源池,也就是说,我们还可以继续再写一个不同的:

  1. [www2]
  2. listen = /tmp/php-fcgi2.sock
  3. user = nobody
  4. group = nobody
  5. pm = dynamic
  6. pm.max_children = 50
  7. pm.start_servers = 20
  8. pm.min_spare_servers = 5
  9. pm.max_spare_servers = 35
  10. pm.max_requests = 500
  11. rlimit_files = 1024

其中,各个选项都可以和 [www]有所不同。

2014-05-24
发表者 Venus
暂无评论

SUSE下搭建lamp环境

最近对SUSE产生了兴趣,正好看到腾讯云有优惠,遂买了一个折腾下。
opensuse:~ # dmidecode | grep “Product”
Product Name: HVM domU #腾讯的虚拟化

搭建个lamp平台
了解到suse下安装软件用zypper或者是yast
opensuse:~ # zypper install -y apache2  (install可以缩写为 in )
opensuse:~ # zypper in -y php5 php5-mysql apache2-mod_php5 php5-gd php5-mbstring php5-curl
opensuse:~ # service apache2 start (start/stop/restart/status)
opensuse:~ # zypper in -y MySQL-server-community
opensuse:~ # cp /usr/share/mysql/my-small.cnf /etc/my.cnf #默认不拷贝配置文件
opensuse:~ # service mysql start  (start/stop/restart/status)
opensuse:~ # mysql -V
mysql Ver 14.12 Distrib 5.0.26, for suse-linux (x86_64) using readline 5.1
发现版本好老

apache
默认apache主目录在  /etc/apache2/
默认网站根目录在      /srv/www/htdocs

php
默认主配置文件在   /etc/php5/apache2/php.ini

mysql
默认数据目录在      /var/lib/mysql (跟redhat一样)
默认主配置文件没有,手动拷贝到/etc/下

修改mysql默认存储引擎:
opensuse:~ # vi /etc/my.cnf
[mysqld]
default-storage-engine=InnoDB

保存退出重启mysql服务。
opensuse:~ # service mysql restart

修改mysql密码:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=password(‘root’) where user=’root’;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

然后就找个php模板放上去,测试一下环境。

(suse的iptables发现好麻烦,没搞定还。默认腾讯云的iptables是清空规则的。)

SUSE关闭iptables:

suse下的iptables管理方式和rh不同
opensuse:~ # chkconfig –list | grep firewall
SuSEfirewall2_init 0:off 1:off 2:off 3:off 4:off 5:off 6:off
SuSEfirewall2_setup 0:off 1:off 2:off 3:off 4:off 5:off 6:off

opensuse:~ # SuSEfirewall2 status/start/stop
SuSEfirewall2: SuSEfirewall2 not active

2014-05-22
发表者 Venus
暂无评论

wordpress实现https后台加密登陆

生成证书及密钥:

当然需要先安装openssl,并且nginx编译时编译进ssl模块。
[root@Rootop ~]# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/www.rootop.org.pem -keyout /etc/ssl/certs/www.rootop.org.key
配置nginx:
在原有虚拟主机或者主配置文件添加:
server
{
listen 443;
ssl on;
ssl_certificate /etc/ssl/certs/www.rootop.org.pem; #证书
ssl_certificate_key /etc/ssl/certs/www.rootop.org.key; #密钥

“`
重启nginx。
配置wordpress:
wordpress本身支持https,只需要修改 wp-config.php 即可实现。
require_once(ABSPATH . ‘wp-settings.php’); 代码部分上面定义如下内容:
define(‘FORCE_SSL_LOGIN’, true); #登陆加密
define(‘FORCE_SSL_ADMIN’, false); #后台加密

然后在iptables中开放443端口即可。
这样一来默认访问都是80端口,登陆后台,点击登陆的时候会走443端口。

2014-05-21
发表者 Venus
暂无评论

安装redis的php扩展模块

从 https://github.com/nicolasff/phpredis/releases 可以找到已发布的版本。
这里找到的版本为:phpredis-2.2.5
安装redis的php扩展模块:
[root@localhost ~]# cd phpredis-2.2.5
[root@localhost phpredis-2.2.5]# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@localhost phpredis-2.2.5]# ./configure
[root@localhost phpredis-2.2.5]# make
[root@localhost phpredis-2.2.5]# make install
Installing shared extensions:     /usr/lib64/php/modules/
修改php.ini,添加载入模块:
extension_dir=/usr/lib64/php/modules/
extension=redis.so
重启apache。

一个基于php的web管理redis程序-phpRedisAdmin。
下载地址:https://github.com/ErikDubbelboer/phpRedisAdmin/releases
下载phpRedisAdmin.zip这个文件包。
传到服务器中。通过url访问。

2014-05-20
发表者 Venus
暂无评论

CentOS6.5下配置Redis-2.8.9主从复制

redis复制原理:
当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连 接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件 后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命 令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从 client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。

环境信息:
selinux、iptables 关闭
master centos6.5_x65 ip:192.168.0.76
slave    centos6.5_x65 ip:192.168.0.75

两台机器安装redis,过程略。
修改master主配置文件:
[root@localhost ~]# vi /usr/local/redis/conf/redis.conf
daemonize yes #守护进程
保存退出。
启动master:
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

修改slave主配置文件:
daemonize yes #守护进程
slaveof 192.168.0.76 6379 #定义master的ip及端口
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
[root@localhost ~]# lsof -i:6379 #看到服务已启动并且与master建立连接
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 4713 root 4u IPv6 21909 0t0 TCP *:6379 (LISTEN)
redis-ser 4713 root 5u IPv4 21911 0t0 TCP *:6379 (LISTEN)
redis-ser 4713 root 6u IPv4 21915 0t0 TCP 192.168.0.75:44736->192.168.0.76:6379 (ESTABLISHED)

测试:
在master执行:
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> set test1 aaa #添加test1
OK
127.0.0.1:6379> get test1
“aaa”
127.0.0.1:6379> set test2 bbb ##添加test2
OK
127.0.0.1:6379> get test2
“bbb”
127.0.0.1:6379>

在slave执行:
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> get test1 #获取数据
“aaa”
127.0.0.1:6379> get test2
“bbb”
127.0.0.1:6379>

默认slave是只能读取,不能添加数据的。在slave添加数据时会报错:
127.0.0.1:6379> set test3 ccc
(error) READONLY You can’t write against a read only slave.

要启用slave的写操作,需要修改配置文件,将slave-read-only改为no
slave-read-only no #yes改为no

redis的主从复制与mysql比较来说配置还是很简单的。