LAMP1

post thumb
Http
作者 Louis 发表于 2018年6月21日

摘要:lamp简介,快速部署lamp,xcache加速php,php应用phpmyadmin/wordpress/discuz搭建。

LAMP

LAM(M)P: linux,apache (httpd), mysql, mariadb,memcached,php, perl, python

  • WEB资源类型:

静态资源:原始形式与响应内容一致,在客户端浏览器执行

<script type="test/javescript">
document.write(new date());
</script>

动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端

<?php
phpinfo();
?>
  • Web相关语言

客户端技术: html,javascript 服务器端技术:php, jsp,python,asp

1529482082441

  • httpd:接收用户的web请求;静态资源则直接响应;动态资源为php脚本,对此类资源的请求将交由php来运行
  • php:运行php程序
  • MariaDB:数据管理系统
  • http与php结合的方式CGI/FastCGI

常见的LAMP应用

  • PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库
  • WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用
  • PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件, 于2008年加入阿里巴巴集团
  • Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议
  • ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0

快速部署LAMP

默认centos7系统

$ yum -y install httpd mariadb-server php php-mysql
$ systemctl start httpd
$ systemctl start mariadb
$ mysql -e "grant all on *.* to test@'192.168.1.%' identified by 'centos';"
$ mysql_secure_installation  #设置mysql数据库的root密码

使用pdo测试php是否已经链接数据库,网站访问http://localhost/test.php,即可测试是否成功。

$ cd /var/www/html
$ vim test.php
<?php
try {
$user='test';
$pass='centos';
$dbh = new PDO('mysql:host=192.168.1.8;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>

wordpress博客搭建

​ WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把 WordPress当作一个内容管理系统(CMS)来使用.

​ 下载安装wordpress,更改配置文件,网站访文http://localhost/wordpress,进行页面设置。前提:已经搭建好LAMP

$ wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz
$ tar xf wordpress-4.9.4-zh_CN.tar.gz -C /var/www/html/
$ cd /var/www/html/wordpress/
$ cp wp-config-sample.php wp-config.php
$ vim wp-config.php
define('DB_NAME', 'wpdb');
/** MySQL数据库用户名 */
define('DB_USER', 'wpdba');
/** MySQL数据库密码 */
define('DB_PASSWORD', 'centos');

Phpmyadmin搭建

​ PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库

下载安装phpadmin,相关的设置和管理需要进入页面http://localhost/。前提:已经搭建好LAMP

$ wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.20/phpMyAdmin-4.0.10.20-all-languages.tar.gz
$ tar xvf phpMyAdmin-4.0.10.20-all-languages.tar.gz -C /var/www/html
$ cd /var/www/html/
$ mv phpMyAdmin-4.0.10.20-all-languages/ phpadmin
$ cd phpadmin
$ cp config.sample.inc.php config.inc.php
$ yum -y install php-mbstring
$ systemctl restart httpd

编译安装xcache加速php

  • php的加速器:基于PHP的特殊扩展机制如opcode缓存扩展也可以将opcode缓存于php的共享内存中,从而可以让同一段代码的后续重复执行时跳过编译阶段以提高性能。这些加速器并非真正提高了opcode的运行速度,而仅是通过分析opcode后并将它们重新排列以达到快速执行的目的。
  • xache:快速而且稳定的PHP opcode缓存,经过严格测试且被大量用于生产环境。项目地址:http://xcache.lighttpd.net/,收录EPEL源。
$ wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
$ yum install -y 'Development Tools'
$ yum install -y php-devel
$ tar xf xcache-3.2.0.tar.gz
$ cd ./xcache-3.2.0/
$ phpize
$ ./configure --enable-xcache --with-php-config=/usr/bin/php-config
$ make -j 4 && make install   #会生成xcache.so文件  
$ ll /usr/lib64/php/modules
-rwxr-xr-x. 1 root root   74688 Nov  6  2016 curl.so
-rwxr-xr-x. 1 root root 2713376 Nov  6  2016 fileinfo.so
-rwxr-xr-x. 1 root root   44688 Nov  6  2016 json.so
-rwxr-xr-x. 1 root root 1305792 Nov  6  2016 mbstring.so
-rwxr-xr-x. 1 root root  146048 Nov  6  2016 mysqli.so
-rwxr-xr-x. 1 root root   57936 Nov  6  2016 mysql.so
-rwxr-xr-x. 1 root root   33184 Nov  6  2016 pdo_mysql.so
-rwxr-xr-x. 1 root root  116344 Nov  6  2016 pdo.so
-rwxr-xr-x. 1 root root   29176 Nov  6  2016 pdo_sqlite.so
-rwxr-xr-x. 1 root root  271992 Nov  6  2016 phar.so
-rwxr-xr-x. 1 root root   51360 Nov  6  2016 sqlite3.so
-rwxr-xr-x. 1 root root  700936 Jun 21 23:37 xcache.so
-rwxr-xr-x. 1 root root   58392 Nov  6  2016 zip.so
$ cp xcache.ini /etc/php.d/
$ systemctl restart httpd

可以测试一下xcache的加速,使用httpd的测压力工具ab进行测试,看看加速情况。

fastcgi模式下的LAMP

php的相关配置

  • 配置文件:/etc/php.ini/etc/php.d/*.ini

Module下,重启Httpd服务 FastCGI模式下,重启php-fpm服务

  • 配置文件格式

配置文件格式:[foo]:Section Header Directive=value 注释符:# 纯粹的注释信息 ; 用于注释可启动的指令 说明:在较新的版本中,已经完全使用”;”进行注释 php.ini核心配置的详细说明: http://php.net/manual/zh/ini.core.php Php.ini配置选项列表: http://php.net/manual/zh/ini.list.php

  • fcgi服务配置文件:/etc/php-fpm.conf, /etc/php-fpm.d/*.conf
  • 连接池:
pm = static|dynamic
static:固定数量的子进程;pm.max_children
dynamic:子进程数量以动态模式管理
pm.max_children
pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
pm.max_requests = 500
  • 确保运行php-fpm进程的用户对session目录有读写权限
mkdir /var/lib/php/session
chown apache.apache /var/lib/php/session
  • 配置httpd,添加/etc/httpd/conf.d/fcgi.conf配置文件,内容类似
$ vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 
#注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
$ httpd –M |grep fcgi
$ cat /etc/httpd/conf.modules.d/00-proxy.conf

基于php-fpm安装lamp

  • 和前面快速lamp的安装基本差不多,:
$ yum -y install php-fpm php-mysql httpd mariadb-server
  • 配置数据库账户
$ systemctl start mariadb httpd
$ mysql -e "grant all on *.* to test@'192.168.1.%' identified by 'centos'"
$ mysql -e 'flush privileges'
  • 测试php-fpm是否连上数据库,提供以下php页面,访问http://localhost/test.php
$ vim test.php
<?php
try {
$user='test';
$pass='centos';
$dbh = new PDO('mysql:host=192.168.1.8;dbname=mysql', $user, $pass);
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
  • 配置apache服务并支持php-fpm,修改完配置文件记得重启服务。
$ vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/www"
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>
$ vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/data/www/$1
$ systemctl restart httpd
$ systemctl start php-fpm

Discuz论坛部署

​ Crossday Discuz! Board(简称 Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议。

​ php常见应用Discuzwordpress;上面已经实现了wordpress个人博客搭建,PhpMyAdmin的web页面管理数据库,这里介绍Discuz_X-3.3的论坛搭建。

$ wget http://download.comsenz.com/DiscuzX/3.3/Discuz_X3.3_SC_UTF8.zip
$ unzip Discuz_X3.3_SC_UTF8.zip
$ cd upload/
$ cp -r  * /data/www/
$ cd /data/www
$ setfacl -R -m u:apache:rwx /data/www
##下面网页配置完成后,记得收回权限,保证安全。
$ setfacl -R -b /data/www/

访问http://localhost/,傻瓜式向导安装,第三步的时候数据库名和自己授权的数据库管理员账户是一致的即可。

1529677345581

1529677434281

1529677896189

到此,基本完成安装。

扩展试验wordpress安全加密

场景:访问wp-admin,wp-login时,需要我们管理服务器时,实现自动http跳转https,保证用户安全。

访问blog等静态页面时,使用http协议传输。

前提:搭建好lamp。

证书申请

提供脚本生成证书,输入你的网站域名www.example.com,重复输入四次密码

$ cat genca.sh
#!/bin/sh
# create self-signed server certificate:
read -p "Enter your domain [www.example.com]: " DOMAIN
echo "Create server key..."
openssl genrsa -des3 -out $DOMAIN.key 1024
echo "Create server certificate signing request..."
SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN"
openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csr
echo "Remove password..."
mv $DOMAIN.key $DOMAIN.origin.key
openssl rsa -in $DOMAIN.origin.key -out $DOMAIN.key
echo "Sign SSL certificate..."
openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt
echo "TODO:"
echo "Copy $DOMAIN.crt to /etc/nginx/ssl/$DOMAIN.crt"
echo "Copy $DOMAIN.key to /etc/nginx/ssl/$DOMAIN.key"
echo "Add configuration in nginx:"
echo "server {"
echo "    ..."
echo "    listen 443 ssl;"
echo "    ssl_certificate     /etc/nginx/ssl/$DOMAIN.crt;"
echo "    ssl_certificate_key /etc/nginx/ssl/$DOMAIN.key;"
echo "}"
$ ./genca.sh
Enter your domain [www.example.com]: www.example.com
$ ll
-rw-r--r--. 1 root root   887 Jun 25 22:40 www.example.com.crt
-rw-r--r--. 1 root root   668 Jun 25 22:40 www.example.com.csr
-rw-r--r--. 1 root root   887 Jun 25 22:40 www.example.com.key
-rw-r--r--. 1 root root   963 Jun 25 22:40 www.example.com.origin.key

配置虚拟主机

这里需要修改一下配置文件 /usr/local/apache/conf/httpd.conf 找到下面的一行 #Include conf/extra/httpd-ssl.conf 将前面的 # 注释去掉,保存。 将上面生成的www.example.com.crtwww.example.com.key放在/app/httpd24/conf/extra/ssl/

$ vim conf.d/httpd-vhost.conf
<VirtualHost *:80>
  DocumentRoot "/app/httpd24/htdocs"
  ServerName www.example.com
  ErrorLog "logs/blog.com.error_log"
  TransferLog "logs/blog.com-access_log"
  DirectoryIndex index.php
  ProxyRequests Off
  ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
  Header always set Strict-Transport-Security "max-age=31536000"
  RewriteEngine on
  RewriteRule ^(/wp-admin.*)$  https://%{HTTP_HOST}$1 [redirect=302]
  RewriteRule ^(/wp-login.*)$  https://%{HTTP_HOST}$1 [redirect=302]
<directory /app/httpd24/htdocs>
allowoverride None
require all granted
</directory>
</VirtualHost>
$ vim  conf.d/httpd-ssl.conf
Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLHonorCipherOrder on 
SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/app/httpd24/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300
<VirtualHost _default_:443>
DirectoryIndex index.php
DocumentRoot "/app/httpd24/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/app/httpd24/logs/error_log"
TransferLog "/app/httpd24/logs/access_log"
<Directory "/app/httpd24/htdocs">
    Options -Indexes +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
ProxyPassMatch  ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1
SSLEngine on
SSLCertificateFile "/app/httpd24/conf/extra/ssl/www.example.com.crt"
SSLCertificateKeyFile "/app/httpd24/conf/extra/ssl/www.example.com.key"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/app/httpd24/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog "/app/httpd24/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>   
$ apachectl start  

域名解析好后,这里需要把你生成的证书导入到chrome下,使用 Chrome 浏览器访问http://www.example.com/wp-admin,你就会看到你的网址自动跳转https了,而且前有个可爱的小绿锁了。

Tags:
上一篇
Http(Apache2)