CC00055.LinuxNetwork——|Linux&Apache.V05|

附录一:
一、工作模式
### --- 查看方式:

http -V | grep -i "server mpm"
### --- 指定方式:

~~~     在编译时,此选项中指定:--with-pmp=xxx
二、相关文件保存位置
### --- 配置文件位置:

~~~     源码安装:   PREFIX/etc/httpd.conf(主配置文件)
~~~                 PREFIX/etc/extra/*.conf(子配置文件)
~~~     rpm包安装: /etc/httpd/conf/httpd.conf
### --- 网页文件位置:
~~~     源码包安装:  PREFIX/htdocs/
~~~     rpm包安装:   /var/www/html

### --- 日志文件位置:
~~~     源码包安装:  PREFIX/logs/
~~~     rpm包安装:   /var/log/httpd/
三、配置文件详解
### --- 注意:Apache配置文件严格区分大小写
~~~     针对主机环境的基本配置参数

    ServerRoot      /usr/loca/apache2                       // Apache主目录
    Listen          :80                                     // 监听端口
    LoadModule      php7                                    // 加载的相关模块
    User                                                    // 
    Group                                                   // 用户和组
    ServerAdmin                                             // 管理员邮箱
    ServerName                                              // 服务器名(没有域名解析时,使用临时解析,默认不开启)
    Errorlog "logs/error_log"                               // 服务器错误日志
    CustomLog "logs/access_log" common                      // 访问记录日志
    DirectoryIndex index.html index.php                     // 默认网页文件名,优先级顺序
    Include etc/extra/httpd-vhosts.conf                     // 自配置文件中内容也会加载生效
### --- 主页目录及权限

    DocmentRoot "/usr/local/apache2/htdocs"                 // 网页文件存放目录(默认)
    <Directory" /usr/local/apache2/htdocs">                 // 定义指定目录的权限
        Options Indexes FollowSymLinks          
            None                                            // 没有任何额外权限
            All                                                 // 所有权限(除去MultiViews以外)
            Indexes                                         // 浏览权限(当此目录下没有默认网页文件时,显示目录内容)
            
            FollowSymLinks                                  // 准许软连接到其他目录
            MultiViews                                      // 准许文件名泛匹配(需要手动开启模块有有效negotiation)
         AllowOverride None                                 // 定义是否允许目录下.htaccess文件中的权限生效
            None                                            // .htaccess中权限不生效
            All                                             // 文件中所有权限都生效
            AuthConfig                                      // 文件中,只有网页认证的权限生效
         Require all granted(denied)                        // 访问控制列表
     </Directory>
    
     <IfModule dir_module>                                  // 此标签用来指定访问到指定目录时自动加载那个页面we年
            DirectoryIndex index.php index.html             // 可以写多个,但是有优先级之分
     </IfModule>
附录二:Apache实验
一、apache的目录别名
### --- 实验环境:建议使用之前搭建好的lamp环境进行测试
~~~     当Apache接收请求时,在默认情况下会将DocumentRoot目录中的文件送到客户端,
~~~     如果想将某一不在DocumentRoot目录中的文件共享到网站上,
~~~     并希望将它们留在本来位置而不需要进行移动的话,
~~~     处理这种情况可以通过建立别名的方式将URL执行特定的目录。
~~~     编辑主配置文件

vim /usr/loca/apache2/conf/httpd.conf
Include etc/extra/httpd-autoindex.conf                      // 去掉注释,开启调用子配置文件
### --- 编辑子配置文件

vim /usr/lcoal/apache2/conf/extra/httpd-autoindex.conf
alias /iscons/ "/usr/local/apache2/icons/"                  // 结构:别名“真实目录”        #真实目录的结尾有/. 否则报错
<Directory "/usr/local/apache2/icons">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
二、apache的用户认证
### --- apache的用户认证

~~~     有时候,我们需要给一些特殊的访问设置一个用户认证机制,增加安全,
~~~     比如我们的个人网站,一般都是有一个管理后台的,虽然管理后台本身就有密码,
~~~     但我们为了更加安全,可以再设置一层用户身份认证。
### --- 编辑配置文件

vim /usr/lcoa/apache2/etc/httpd.conf
~~~     在需要进行登录认证的目录标签中加入如下配置:
<Directory "/usr/local/apache2/htdocs/admin">               // 声明被保护目录
        Options Indexes FollowSymLinks
        AllowOverride All                                   // 开启权限认证文件.htaccess
        Require all granted
</Directory>
### --- 在指定目录下创建权限文件
~~~     切换到/usr/local/apache2/htdocs/admin创建.htaccess 文件,并添加下面的内容

vim .htaccess
AuthName "Welcome to atyanqi"                               // 提示信息
AuthType basic                                              // 加密类型
AuthUserFile /usr/loca/apache2/htdocs/admin/apache.passwd   // 密码文件,文件名自定义(使用绝对路径)
require valid-user                                          // 允许密码文件中所有用户访问
### --- 建立密码文件,加入允许访问的用户,(此用户和系统用户无关)
~~~     注意:htpasswd该命令是httpd的命令,需要绝对路径

htpasswwd -c /sr/local/apache2/htdocs/admin/apache.passwd test1   // -c  建立密码文件,只有添加一个用户时,才能-c
htpasswd -m /usr/loca/apache2/htdocs/admin/apache.paasswd test2   // -m 再添加更多用户时,使用-m参数
### --- 重启Apache服务
~~~     先检查配置是否正确,然后通过浏览器输入要访问的资源时就会提示输入密码了。

/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
附录三:
一、虚拟主机(重点)
### --- 虚拟主机(重点)

~~~     虚拟主机,也叫“王占空间“,
~~~     就是把一台运行在互联网上的物理服务器划分成多个”虚拟“服务器,
~~~     虚拟机主机技术极大的促进了网站技术的应用和普及,
~~~     同时虚拟主机的租用服务也成了网络时代的一种新型经济技术。
### --- 虚拟主机的分类

~~~     基于IP的虚拟主机:一台服务器,多个IP,搭建多个网站
~~~     基于端口的虚拟主机:一台服务器,一个IP,搭建多个网站,每个网站使用不同的端口访问
~~~     基于域名的虚拟主机:一台服务器,一个IP,搭建多个网站,每个网站使用不同的域名访问
### --- 域名解析:准备两个域名
~~~     使用本地hosts文件进行解析

www.yanqiv1.com
www.yanqiv2.com
### --- 网站主页目录规划

~~~     在/htdocs/目录下分别创建yanqivip1和yanqiv2两个目录,
~~~     并且新建目录内创建index.html文件(分别写不一样的内容)
### --- 修改主配置文件开启文件关联

vim /usr/local/apache2/etc/httd.conf
    Include etc/extra/httpd-vhosts.conf                         // 此行取消注释
### --- 编辑子配置文件,编写虚拟主机标签

vim /usr/local/apache2/etc/extra/httpd-vhosts.conf              // 添加以下内容,有几个虚拟主机就写机组(添加之前先把原先存在的示例删除掉)
<Directory "/usr/local/apache2/htdocs/yanqiv1">
    Options Indexes FollowSymLiniks
    AllowOverride None
    Require all granted
</Directory>
#目录权限标签根据需要自行添加
<VirtualHost 192.168.88.10:80>                                  // 虚拟主机标签
ServerAdmin webmaster@yanqiv1.com                               // 管理员邮箱
    DocumentRoot "/usr/local/apache2/htdocs/yanqiv1"            // 网站主目录
    ServerName www.yanqiv1.com                                  // 完整域名
    ErrorLog "logs/sina-error_log"                              // 错误日志
    CustomLog "logs/yanqiv1-access_log" common                  // 访问日志
</VirtualHost>
### --- 重启服务,验证结果

~~~     #Windows下:
~~~     浏览器输入两个不同的域名验证网页内容(提前修改windows的hosts文件)
~~~     #Linux下:
~~~     通过elinks/curl命令验证:elinks/curl URL地址(提前修该linux的hosts文件)
二、域名跳转
### --- 域名跳转
~~~     一个网站难免会有多个域名,而多个域名总得有一个主次,
~~~     比如我的网站可以用两个域名访问:www.yanqiv1.com和www.yanqiv2.com
~~~     但大家发现不管我用那个域名访问,
~~~     最终都会跳转到www.yanqi.com上来,这个行为就叫做域名的跳转,
~~~     状态码:301是永久跳转,万丈上一定要是和值为301,这样对搜索引擎是比较友好的。
~~~     实验条件
~~~     虚拟主机能正常访问
~~~     打开主配置文件开启重写模块

LoadModule rewrite_module modules/mod_rwewrite.so           // 取消注释
### --- 实验步骤:
~~~     修改虚拟主机配置文件

vim */extra/httpd-vhosts.conf
    <Directory "/usr/local/apache2/htdocs/sodu">
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
    </Directory>
### --- 创建匹配文件

vim */.htaccess                                             // 在指定的网站目录下创建文件,并添加如下内容
RewriteEngine on                                            // 开启rewrite功能
RewriteCondition %{HTTP_HOST} ^wwww.yanqi.com               // 把以www.yanqi.com    开头的内容赋值给HTTP_HOST变量
RewriteRule ^(.*)$ http://www.yanqi.com/$1 [R=permanent,L]
# ^(.*)$指带客户端要访问的资源
# $1 把 .* 所指代的内容赋值到$1变量中
# R=permanent 永久重定向 = 301
# L 指定该规则为最后一条生效的规则,以后的不在生效
### --- 重启服务器并测试
~~~     通过上述测试,
~~~     发现无论是yanqiv1或yanqiv2最终都是访问到www.yanqi.com域名上来则试验成功

/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
附录四:
一、Apache+openssl实现https(重点)
### --- Apache+openssl实现https(重点)

~~~     HTTPS(全称:Hypertext Transfer Protocol Secure,
~~~     超文本传输协议)是以安全为目标的HTTP通道,简单讲是HTTP的安全版,
~~~     即HTTP下加入SSl层,用于安全的HTTP数据传输,这个系统被内置浏览器中,
~~~     提供身份验证与加密通讯方法,
~~~     现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
### --- 准备工作

~~~     检查Apache是否支持SSL,检查相应模块是否安装,若安装则将模块启用
~~~     模块存放目录:/usrl/local/apache2/modules
~~~     检查是否启用,apachectl -M
### --- CA证书申请:
~~~     #注意1:生成完秘钥和证书文件后,将文件存放在Apache的安装目录下的cert目录下
~~~     #注意2:在生产环境中必须要在https证书厂商注册(否则浏览器不识别)

openssl genrsa-out ca.key 1024                              // 建立服务器私钥,生成RSA秘钥
openssl req -new -key ca.key -out atyanqi.csr               // 需要一次输入国家/地区/城市/组织/组织单位/Email等信息,最重要的是有一个common name,可以写你的名字或者域名,如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报,生成的csr文件交给CA签名后形成服务端自己的证书
openssl x509 -req -days 365 -in atyanqi.csr -signkey ca.key -out atyanqi.crt  // 使用CA服务器签发证书,设置证书的有效期等信息
### --- 配置文件修改:
~~~     调用ssl模块,并启用ssl独立配置文件

vim /usr/local/apache2/etc/httpd.con
LoadModule ssl_module modules/mod_ssl.so                    // 取消注释
Include etc/extra/httpd-ssl.conf                            // 取消注释
~~~     修改conf/extra/httpd-ssl.conf配置文件,调用证书等文件
SSLProtocol all -SSLv2 -SSLv3                               // 添加SSL协议支持协议,去掉不安全的协议
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM    // 修改加密套件
SSLHonorCipherOrder on
SSLCertificateFile cert/atyanqi.crt                         // 证书公钥配置(签字的)
SSLCertificateKeyFile cert/ca.key                           // 证书私钥配置

~~~     修改主配置文件,添加虚拟主机
<VirtualHost_default_:443>
#DocumentRoot目录位置要和httpd.conf里面的一致
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName localhost:443
    SSLCertificateFile cert/ca.key
    SSLCertificateChainFile cert/atyanqi.crt
</CirtualHost>
### --- 验证结果
apachectl -t                                                // 检查配置文件语法
apachectl restart                                           // 重启Apache,并测试是否可以使用https访问

~~~     #报错信息:
~~~     AH00526:Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf:
SSLSessionCache:'shmcb' session cache not supported (known names:).Maybe you need to load the appropriate socache module (mod_socache_shmcb?)
~~~     #解决方案:
~~~     要么不调用此模块,要么让调用的模块加载上。
### --- 强制跳转https
~~~     有些时候为了安全,网站不允许使用http访问,仅允许使用https访问,
~~~     目的是为了更加安全在http部分目录权限标签中添加以下内容
~~~     在做后面实现时为了更加方便理解,我们可以先把https关闭掉,
~~~     需要关闭:跳转&虚拟主机&ssl配置文件调用

<Directory "/usr/local/apache2/htdocs">
 ……
 RewriteEngine on                                           // 开启转发规则
 RewriteCondition %{SERVER_PORT} !^443$                     // 检查访问端口只要目标不是443的
 RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]    // 全部使用https重新访问
</Directory>
二、Apache日志切割
### --- Apache日志切割

~~~     我们没访问一次网站,那么就会记录若干条日志,如果日志不去管理,
~~~     时间长了日志文件会越来越大,如何避免产生大的日志文件?
~~~     其实Apache有相关的配置,使用日志按照我们的需求进行归档,
~~~     比如每天一个新日志,或者每小时一个新的日志
### --- 首先简单设置日志的路径名称

~~~     ErrorLOG是错误日志,CustomLog是访问日志,|就是管道符,
~~~     意思是把产生的日志交给rotatelog这个工具,
~~~     而这个工具就是Apache自带的切割日志的工具,
~~~     -l 的作用是校对准时区为UTC,也就是北京时间,86400,单位是秒,
~~~     正好是一天,那么日志会每天切割一次,
~~~     而最后面的combined为日志的格式,在httpd.conf中有意义。
### --- 编辑配置文件

vim /usr/local/apache2/etc/httpd.conf
~~~     #编辑添加如下内容:
ErrorLog "logs/error.log"
CustomLog "Logs/access.log" combined
~~~     #指定了日志存放在/usr/local/apache2/logs目录下分别为error.log和access.log,combined为日志显示的格式,日志格式可以参考配置文件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
### --- 设置Apache日志分割
### --- 同样编辑配置文件httpd.conf
~~~     #注意1:以上仅为两条命令(一条错误日志,一条访问日志,路径太长写不开
~~~     #注意:若开启了https,则需要修改http-ssl.conf配置文件中的日志记录条目

ErrorLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/error_%Y%m%d.log 86400"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/access_%Y%m%d.log 86400" combined
三、不记录指定文件类型的日志
### --- 不记录指定文件类型的日志

~~~     如果一个网站访问量特别大,那么访问日志就会很多,
~~~     但有一些访问日志其实是可以忽略掉的,比如网站的一些图片,
~~~     还有js、css等静态对象,而这些文件的访问往往是巨大的,
~~~     而且即使记录这些日志也没有什么用,那么如何忽略不记录这些日志呢?
### --- 配置日志不寄了图片的访问
~~~     说明:在原来的访问日志配置基础上,增加了一些image-request的定义,
~~~     比如把gif/jpg/bmp/swf/js/css等结尾的全标记为image-request,
~~~     然后在配置日志后加一个标记env=!image-request,表示取反。

vim /usr/local/apache2/conf/httpd.conf
#相关配置为:
SetEnvIf Request_URL "\.gif$" image-request
SetEnvIf Request_URL "\.ipg$" image-request
SetEnvIf Request_URL "\.png$" image-request
SetEnvIf Request_URL "\.bmp$" image-request
SetEnvIf Request_URL "\.swf$" image-request
SetEnvIf Request_URL "\.js$" image-request
SetEnvIf Request_URL "\.css$" image-request
CustomLog "|/usr/local ... _%Y%md.log 86400" combined env=!image-request
四、Apache配置静态缓存
### --- Apache配置静态缓存

~~~     所说的静态文件是指图片/js/css等文件,用户访问一个站点,
~~~     其实大多数元素都是图片/js/css等,
~~~     这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,
~~~     目的就是为了下次再请求时不再去服务器上下载,这样就加快了速度,
~~~     提高快乐用户体验,但这些静态文件总不能一直缓存,它总有一些时效性,
~~~     那么就得设置这个过期时间
### --- 配置静态缓存

vim /usr/local/apache2/conf/httpd.conf
<IfModule mod_expires.c>                                        // 此模块默认未开启,请手动启用
    ExpiresActive on
    ExpiresByType image/gif "access puls 1 days"
    ExpiresByType image/jpeg "access plus 24 hours"
    ExpiresByType image/png "access plus 25 hours"
    ExpiresByType test/css "access plus 2 hours"
    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>
#或者使用mod_headers模块实现,该模块默认启用
<IfModule mod_headers.c>
    # htm,html,txt类的文件缓存为一个小时
    <filematch "\.(html|htm|txt)$">
       header  set cache-control "max-age=3600"
    </filesmatch>
    #css,js,swf 类的文件缓存一个星期
    <filesmatch "\.(css|js|swf)$">
        header  set cache-control "max-age=604800"
    </filesmatch>
    #jpg,gif,jpeg,png,ico,flv,pdf等文件缓存一年
    <filesmatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
        header set cache-control "max-age=29030400"
    </filesmatch>
</IfModule>
~~~     说明:这里的时间单位可以days,hours甚至是min,两种不同的方法,
~~~     上面使用的是mod_expires,而下面用的是mod_headers,要想使用这些模块,
~~~     必须要事先已经支持,如何查看是否支持,使用命令

/usr/local/apache2/bin/apachectl -M
### --- 重启服务器并验证

/usr/local/apache2/bin/apachectl -t
/usr/local/apache2/bin/apachectl stop
/usr/local/apache2/bin/apachectl start
### --- 验证

curl -x127.0.0.1:80 'http://www.yanqi.com/image/a.jpg' -I
HTTP/1.1 200 OK 
Date: Wed, 26 Oct 2016 03:51:26 GMT
Server: Apache/2.2.31 (Unix) PHP/5.5.38
Last-Modufied:Tue,31 May 2016 03:08:36 GMT
ETag: "46891b-16b-5341ab0597500"
Accept-Ranges: bytes
Content-Length: 363
Cache-Control: max-age=86400
ExpiresL Thu, 27 Oct 2016 03:51:26 GMT
Content-Type: image/jpg
五、禁止解析PHP
### --- 禁止解析PHP

~~~     某个目录下禁止解析PHP,这个很有作用,我们做网站安全的时候,这个用的很多,
~~~     比如某些目录可以上传文件,为了避免上传的有木马,所以我们禁止这个目录下面的访问解析PHP
### --- 配置静止解析PHP

<Directory /usr/local/apache2/htdocs/data>
    php_admin_flag engine off
    <filesmatch "(.*)php">
        Order deny,allow
        Deny from all
    </filesmatch>
</Directory>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值