linux复盘:构架搭建lamp(配置)

apache和php结合

vim /usr/local/apache2.4/conf/httpd.conf //修改如下4个地方javascript

#ServerNamephp

这就是在Apache启动start时的输出内容,打开注释掉的www.example.com:80css

#Require all denied修改成Require all granted是受权容许访问的意思,不容许就是403html

#controls who can get stuff from this server后面修改denied为grantedjava

#容许PHP服务解析该服务器nginx

用/AddType 搜索到对应的信息添加“AddType application/x-httpd-php .php”算法

#添加索引页apache

用/index 搜索到 DirectoryIndex index.html 在后面追加上index.phpvim

修改完配置文件检查是否正确:/usr/local/apache2.4/bin/apachectl -t (syntax ok)浏览器

最后从新加载配置文件:/usr/local/apache2.4/bin/apachectl graceful

/usr/local/apache2.4/bin/apachectl start //启动服务

/usr/local/apache2.4/bin/apachectl graceful //从新加载服务

netstat -lntp 查看端口

检测服务器是否支持PHP解析:

vim /usr/local/apache2.4/htdocs/1.php //增长以下内容

<?php

phpinfo(); 

?> 
//该参数的含义是PHP的信息
//该命令的含义是:在访问该地址时,直接打印PHP的相关信息

curl loaclhost/1.php

php解析正常一堆东西就说明成功了,而后能够在网页上也测试一下,记得修改Windows的hosts

若是能够正常访问,说明该服务器支持PHP解析,若是不支持php解析的话,访问该文件时会显示源代码

Apache用户认证

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"  
    ServerName  111.com
    serveralias www.111.com
    <Directory /data/wwwroot/111.com> //指定认证的目录
        AllowOverride AuthConfig //这个至关于打开认证的开关
        AuthName "111.com user auth" //自定义认证的名字,做用不大
        AuthType Basic //认证的类型,通常为Basic,其余类型阿铭没用过
        AuthUserFile /data/.htpasswd  //指定密码文件所在位置
        require valid-user //指定须要认证的用户为所有可用用户
    </Directory>
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" common
</VirtualHost>

建立密码文件(后面lnmp的时候须要yum安装httpd来实现此工具)

htpasswd命令:

Apache的Web服务器内置工具,用于建立和更新储存用户名、域和用户基本认证的密码文件

-c:=create,建立一个加密文件(二次不须要加此选项)

-n:不更新加密文件,只将更新后的用户名密码显示在屏幕上

-m:使用MD5算法对密码进行加密(默认)

-d:使用CRYPT算法对密码进行加密

-p:不对密码进行加密,即明文密码

-s:使用SHA算法对密码进行加密

-b:在命令行一并输入用户名和密码,而不是根据提示输入密码

-D:删除指定用户

/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming(这个aming是指定用户)
New password: 
Re-type new password: 
Adding password for user aming
##在“/data/.htpasswd”为用户aming(自动建立)建立一个使用MD5算法加密的密码文件
##再次建立用户密码时不须要-c,由于文件以及建立了

也能够单独针对文件进行认证

<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    <FilesMatch 123.php>  只有在访问到123.php时才须要认真☆☆☆
        AllowOverride AuthConfig
        AuthName "111.com user auth"
        AuthType Basic
        AuthUserFile /data/.htpasswd
        require valid-user
    </FilesMatch>
</VirtualHost>

域名跳转

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/data/wwwroot/111.com"
    ServerName 111.com
    ServerAlias www.111.com
    <IfModule mod_rewrite.c>     //须要mod_rewrite模块支持
        RewriteEngine on              //打开rewrite功能
        RewriteCond %{HTTP_HOST} !^111.com$    //定义rewrite的条件,主机名(域名)不是111.com知足条件
        RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]  //定义rewrite规则,当知足上面的条件时,这条规则才会执行
   </IfModule>
   ErrorLog "logs/111.com-error_log"
   CustomLog "logs/111.com-access_log" combined
</VirtualHost>

此方法实现www.111.com跳转到111.com

注意的是若是缺乏rewrite模块没法实现此功能

/usr/local/apache2.4/bin/apachectl -M|grep -i rewrite  //若无该模块
vim /usr/local/apache2.4/conf/httpd.conf
删除rewrite_module (shared) 前面的#

Apache访问日志

日志文件路径:
ls /usr/local/apache2.4/logs

日志格式路径:
vim /usr/local/apache2.4/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
h表示host来源IP
l表示login用户,
u表示user用户密码
t表示time时间
r表示request(行为)
s表示status状态码
b表示byte大小
User-Agent:用户代理,经过什么去访问,好比浏览器或者curl这些就是用户代理
Referer:浏览器上次访问的网址,跳过来前的地址

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ...
    ErrorLog "logs/111.com-error_log"
    CustomLog "logs/111.com-access_log" combined(把格式从原来的common修改成combined)
</VirtualHost>

cat /usr/local/apache2.4/logs/111.com-access_log

tail  -F /usr/local/apache2.4/logs/111.com-access_log

访问日志不记录静态文件

<VirtualHost *:80>
   ...
    SetEnvIf Request_URI ".*\.gif$" img
    SetEnvIf Request_URI ".*\.jpg$" img
    SetEnvIf Request_URI ".*\.png$" img
    SetEnvIf Request_URI ".*\.bmp$" img
    SetEnvIf Request_URI ".*\.swf$" img
    SetEnvIf Request_URI ".*\.js$" img
    SetEnvIf Request_URI ".*\.css$" img
    #以上为定义变量:将全部关于图片的请求定义为变量img
    CustomLog "logs/111.com-access_log" combined env=!img
    #“env=!img”表示非img变量。本行命令的含义是:不记录关于变量img的请求日志
</VirtualHost>

##将全部访问图片的请求定义为变量img,在访问记录(日志)中将其排除便可。从新加载后使用curl访问img变量中所指定格式的文件内容时将不会产生访问记录。

访问日志切割

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ...   
    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img  (combined将日志记录详细,日志按天切割)
</VirtualHost>

#rotatelogs是切割日志的工具
-l 以当前系统的时间为基准切割日志 中国为CST
定义切割后的名字,_%Y%m%d.log,Y年m月d日,切割时间为一天换算成秒文86400秒
日志保存在/usr/local/apache2.4/logs中
每小时切割一第二天志就是CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 3600"

静态文件过时时间

<VirtualHost *:80>
    ...
<IfModule mod_expires.c>
    ExpiresActive on  //打开该功能的开关
    ExpiresByType image/gif  "access plus 1 days"  //全部图片定义为一天
    ExpiresByType image/jpeg "access plus 24 hours"  
    ExpiresByType image/png "access plus 24 hours"
    ExpiresByType text/css "now plus 2 hour"    //全部css定义为两小时
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
</IfModule>
</VirtualHost>

#模块/usr/local/apache2.4/bin/apachectl -M | grep -i expire
vim /usr/local/apache2.4/conf/httpd.conf搜索/expires并打开其模块

配置防盗链

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com> (防盗链目录为本站点)
        SetEnvIfNoCase Referer "http://111.com" local_ref (白名单)
        SetEnvIfNoCase Referer "http://aaa.com" local_ref (白名单)
        SetEnvIfNoCase Referer "^$" local_ref  (空的referer)
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">  (针对这些的访问作防盗链)
            Order Allow,Deny   (定义访问控制顺序,这里是先把白名单的referer作一个容许其余的禁止)
            Allow from env=local_ref  (这两行指把白名单的referer作一个容许)
        </filesmatch>
</Directory>

访问控制Directory(控制目录的形式)

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
    <Directory /data/wwwroot/111.com/admin/> #本节用于设定指定IP访问指定目录的权限
        Order deny,allow (Order用来定义顺序,先allow容许仍是deny拒绝看顺序)
        Deny from all
        Allow from 127.0.0.1
        #只容许IP--127.0.0.1访问“/data/wwwroot/111.com/admin/”目录中的内容
        #这里限制的ip是源ip,-x指定的是目标ip,可是目标来源ip相同因此指定目标ip就能够实现需求
    </Directory>

访问控制FilesMatch(控制文件名/连接的形式)

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com>
        <FilesMatch  "admin.php(.*)"> (针对连接和文件名进行控制)
        Order deny,allow  
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>

限定某个目录禁止解析php

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
<Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
</Directory>

#若是只限制php解析,用户访问时还会看到php的源码,为了更安全能够直接没法访问php文件提升安全性
<Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        Order Allow,Deny
        Deny from all
        </FilesMatch>
</Directory>

限制user_agent(浏览器标识)

user_agent是浏览器的标识,用curl访问时,出现curl/7.29.0为Firefox浏览器,工做中用它来限制一些访问,当受到cc攻击,可是它的攻击都有规律,user_agent是相同的,因此使用限制它来实现控制

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>
#NC表示忽略大小写,OR选项表示或者(不加任何选项表而且)链接下一个条件,F=forbidden禁止。

PHP扩展模块

在PHP的源码包中没有第三方模块的包,可是在PHP源码包的/ext/目录下有好多扩展模块,若是所须要的扩展模块在该目录下,能够直接进行安装:
先切换到指定模块目录下
生成configure文件:/usr/local/php7/bin/phpize
环境配置:./configure --with-php-config=/usr/local/php7/bin/php-config
make&&make install
安装完成后在编辑PHP配置文件php.inid加载模块!
相关文章
相关标签/搜索