zoukankan      html  css  js  c++  java
  • Apache配置手札

    一、绑定不同域名到不同项目目录

    可httpd.conf文件末尾添加(不建议)

    正规做法应在配置目录建立vhosts文件夹,每一个项目对应一个conf配置文件

    #本地访问
    #IP访问,主要用于开发环境手机连接WIFI访问电脑的
    #服务器上一般不要允许IP访问
    #ip.conf
    <VirtualHost *:80>
        DocumentRoot "D:wampwww"
        ServerName localhost
        ServerAlias 127.0.0.1 192.168.1.129
    </VirtualHost>
    
    
    #batsing.com.conf
    <VirtualHost *:80>
        DocumentRoot "D:wampwwwatsing"
        ServerName www.batsing.com
    ServerAlias batsing.cn batsing.com.cn <
    /VirtualHost> #getchar.cn.conf <VirtualHost *:80> DocumentRoot "D:wampwwwgetchar" ServerName www.getchar.cn </VirtualHost>

     二、Apache 外部访问(如WIFI),出现403错误,wamp刚装好时常见

    打开httpd.conf文件,找到

    Require local

    改成

    #   Require local
        Require all granted

    即是注释掉允许本机访问,改成允许外部访问,然后重启Apache

    三、使Apache支持 .htaccess URL重写

    打开httpd.conf文件

    查找 

    #LoadModule rewrite_module modules/mod_rewrite.so

    把#去掉;
    查找

    # AllowOverride controls what directives may be placed in .htaccess files.

    把它下面的 AllowOverride None改成 AllowOverride all

    还需要在其vhost配置里加上类似下面的代码

    <VirtualHost *:80>
      DocumentRoot "/home/mywebsite"   ServerName www.batsing.com

      <Directory "/home/mywebsite" >     AllowOverride All   </Directory>
    </VirtualHost>

    注意上面的Directory中的路径不能用~代替,否则.htaccess将会无效;

    重启Apache,即可支持URL重写

    五、禁止所有项目中的 .svn .git等目录和 .ht .project 等文件的访问

    在vhosts文件夹中新建 common.conf

    #所有项目 .svn .git .ht* 等拒绝访问
    <Directory ~ "/.">
        Deny from all
    </Directory>

    六、服务器上禁止IP(和其它非法域名)访问

    httpd.conf最末尾加入以下内容,注意一定要放在vhost配置之后,否则会全站80端口都拒绝访问

    #禁止IP所有非法域名直接访问
    <VirtualHost *:80>
        ServerAlias *
        <Location />
            Order Allow,Deny
            Deny from all
        </Location>
    </VirtualHost>

    七、屏蔽上传目录的脚本执行权限,以防文件上传漏洞

    方案一:项目host.conf添加

    #    禁用某些目录的PHP执行权限
        <Directory ~ "/Upload">
            <FilesMatch "(?i:.php)$">
                Order allow,deny
                Deny from all
            </FilesMatch>
        </Directory>

    方案二:在对应目录放置.htaccess文件

    <FilesMatch "(?i:.php)$">
        Deny from all
    </FilesMatch>

    所使用的是正则匹配,匹配指定目录下以及其子目录所有的以 .php 结尾的文件,都拒绝访问。但对于以 php 结尾的URL(如:study.batsing.com/php )是不会被过滤掉的。当访问被过滤的目录中的以 .php 为后缀的文件时,将会遇到 Forbidden 的 403 错误,从而有效阻止可能非法上传的脚本文件的执行。下面这一段摘抄自 西部数码虚拟主机目录保护功能 的说明。

    1. “目录保护”功能,主要用于限制指定目录的脚本执行权限。通常对允许用户上传文件的目录设置为可写权限,同时用目录保护取消该目录的脚本执行权限,以防止黑客上传病毒木马。
    2. 通常用户网站被黑(如网页被篡改,文件被盗,被删等)都是因为黑客通过网站的文件上传功能将asp/php木马上传到空间并运行造成的。 所以在无法确认系统是否存在上传漏洞的情况下,只要保证文件上传目录没有脚本运行权限,那么即便黑客将木马上传到您的空间他也无法运行,这样就无法危及您的网站,使您网站更安全。
    3. 设置后的目录不能运行脚本程序。

    八、禁止项目目录某些文件夹的直接访问

    大多数的MVC框架应用目录,如 ./Application 等,不应直接访问,均需通过入口文件;

    方案一:项目host.conf添加

    #    禁用某些目录的直接访问
        <Directory ~ "/Application">
            <FilesMatch "(.*)$">
                Order allow,deny
                Deny from all
            </FilesMatch>
        </Directory>

    方案二:在该目录下放入 .htaccess 文件,里面写上这个内容

    #项目目录屏蔽所有没经过入口文件,直接URL访问的
    <FilesMatch "(.*)">
        Deny from all
    </FilesMatch>

    九、配置https

    mod_ssl.so扩展模块

    1. 检查apache的 modules/mod_ssl.so 文件是否存在,如果不存在则先  yum install mod_ssl 
    2. 从 /usr/lib64/httpd/modules 文件夹中找到 mod_ssl.so文件,拷到apache的 modules目录
    3. 修改 httpd.conf 配置文件,在 Listen 80 下一行加上 Listen 443
    4. 找到 #LoadModule ssl_module modules/mod_ssl.so ,把前面的#去掉(即去掉注释)
    5. (yum install mod_ssl 时可能会安装了另一个新的apache并注册为httpd服务,参考上面第四条修改服务为原本的apache)
    6. 如果原来已经有mod_ssl,注意检查版本,以免出现“心血漏洞” , 附:心血漏洞检测脚本工具

     vhost配置

      xxx.pem (或 xxx.crt 或 xxx.cer)为证书文件,  xxx.key 为ssl私钥

      注:自签发的ssl证书,现在的浏览器已经不承认了,配了这种别人反而会打不开网站

    <VirtualHost *:443>
        DocumentRoot "/home/mywebsite"
        ServerName www.batsing.com
        ServerAlias m.batsing.com batsing.com
        <IfModule mod_ssl.c>
            SSLEngine on
            SSLCertificateFile        /home/ssl/batsing.com.pem
            SSLCertificateKeyFile     /home/ssl/batsing.com.key
        </IfModule>
    </VirtualHost>

    配置http自动跳转https

    <VirtualHost *:80>
        DocumentRoot "/home/mywebsite"
        ServerName www.batsing.com
        ServerAlias m.batsing.com batsing.com
    #    http -> https
        <IfModule mod_rewrite.c>
            Options +FollowSymlinks
            RewriteEngine On
            RewriteRule ^(.*)$ https://www.batsing.com$1 [R=permanent,L]
        </IfModule>
    </VirtualHost>

    十、手机浏览器自动跳转到移动版

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{HTTP_HOST} ^www.batsing.com$ [NC]         # 要限定PC版的域名,不然会使手机端产生重定向循环错误
        RewriteCond %{HTTP_USER_AGENT} "Mobile" [NC]            # 含Mobile字眼的浏览器(包括微信、UC移动、QQ移动、Safari移动、安卓原生等)
        RewriteRule ^(.*)$ http://m.batsing.com$1 [R=301,NC,L]  #跳转到移动端对应的地址
    #   RewriteRule ^(.*)$ http://m.batsing.com [R=301,NC,L]    #跳转到移动端的首页
    </IfModule>

    说明:.htaccess保存立即生效,xxx.conf需要重启/重载Apache才能生效。

    零、Linux 下 Apache基本操作命令

    基本的操作方法:
    如果apache安装成为linux的服务的话,可以用以下命令操作:

    service httpd start #启动
    service httpd restart #重新启动
    service httpd stop #停止服务

    不是linux服务的话:
    本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况

    apahce启动命令:
    推荐/usr/local/apache2/bin/apachectl start 启动
    apache停止命令
    /usr/local/apache2/bin/apachectl stop   停止
    apache重新启动命令:
    /usr/local/apache2/bin/apachectl restart 重启
    要在重启 Apache 服务器时不中断当前的连接,则应运行:
    /usr/local/sbin/apachectl graceful

    将apache注册为linux服务:

    cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd
    chkconfig --add httpd

    附:一个完整的典型域名配置文件 batsing.com.conf

  • 相关阅读:
    如何解决错误【selenium.common.exceptions.SessionNotCreatedException】
    VSFTP常用功能及参数配置
    ROS白名单服务端PHP脚本,客户端ROS脚本
    ocserver标准配置文件
    linux send与recv函数详解
    LINUX 恢复rm删除的文件
    C语言实现md5函数代码
    linux c语言获取CPU,内存,网速,磁盘使用,IO
    linux c语言fork socket 并发回射服务器
    杨惠兰不值得任何人付出
  • 原文地址:https://www.cnblogs.com/batsing/p/apache.html
Copyright © 2011-2022 走看看