当前位置: 首页 > 编程日记 > 正文

httpd常用配置

author:JevonWei
版权声明:原创作品


  • 检查配置文件时,如下提示,则因为没有server的服务名称导致,故设置网站的服务server名称,若没有设置web服务名,主默认解析系统主机名(添加主机名解析)

    [root@danran html]# httpd -t
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using danran.com. Set the 'ServerName' directive globally to suppress this message
    Syntax OK

    在/etc/httpd/conf/httpd.conf设置servername名称
    vim /etc/httpd/conf/httpd.conf
    #ServerName www.example.com:80

    或 在主机名解析文件中,添加主机名解析
    [root@danran html]# cat /etc/hosts
    127.0.0.1 danran.com

  • 显示服务器版本信息

    ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full \显示web服务的头部信息
    ServerTokens Prod[uctOnly]:Server: Apache
    ServerTokens Major: Server: Apache/2
    ServerTokens Minor: Server: Apache/2.0
    ServerTokens Min[imal]: Server: Apache/2.0.41
    ServerTokens OS: Server: Apache/2.0.41 (Unix)
    ServerTokens Full (or not specified): Server: Apache/2.0.41(Unix) PHP/4.2.2 MyMod/1.2
    This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis.
    After version 2.0.44, this directive also controls the information presented by the
    ServerSignature directive.

    建议使用:ServerTokens Prod

    示例
    [root@danran mysql]# curl -I 192.168.198.134
    HTTP/1.1 200 OK
    Date: Mon, 31 Jul 2017 04:30:38 GMT
    Server: Apache/2.4.6 (CentOS) \显示web服务的版本信息
    Last-Modified: Mon, 31 Jul 2017 03:02:48 GMT
    ETag: "b-55594440a26a5"
    Accept-Ranges: bytes
    Content-Length: 11
    Content-Type: text/html; charset=UTF-8

      [root@danran conf]# vim /etc/httpd/conf/httpd.conf ServerTokens prod[root@danran conf]# service httpd restart[root@danran conf]# curl -I 192.168.198.136HTTP/1.1 403 ForbiddenDate: Sun, 02 Jul 2017 10:49:03 GMTServer: ApacheAccept-Ranges: bytesContent-Length: 4961Connection: closeContent-Type: text/html; charset=UTF-8
  • 修改监听的IP和Port

    Listen [IP:]PORT (1) 省略IP表示为0.0.0.0; (2) Listen指令可重复出现多次
    Listen 80
    Listen 8080
    Listen 172.168.198.134:80 \监听IP为172.168.198.134的80端口 (3) 修改监听socket,重启服务进程方可生效
    service httpd restart
  • 持久连接

    KeepAlive On|Off \允许/禁止持久连接
    KeepAliveTimeout 15 \最长等待连接时间
    MaxKeepAliveRequests 100 \最大连接请求次数

  • MPM(Multi-Processing Module)多路处理模块

    prefork, worker, event(试验阶段)
    httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持
    确认方法:
    ps aux | grep httpd
    默认为/usr/sbin/httpd,即prefork 模式

    [root@danran mysql]# vim /etc/sysconfig/httpd
    HTTPD=/usr/sbin/httpd.worker

    查看静态编译的模块
    httpd.work -l
    查看静态编译及动态装载的模块
    httpd.work –M

    prefork的默认配置:
    <IfModule prefork.c>
    StartServers 8 \开启启动开启的进程
    MinSpareServers 5 \最小的空闲进程个数
    MaxSpareServers 20 \最大的空闲进程数
    ServerLimit 256 \最多进程数, 最大20000
    MaxClients 256 \最大并发
    MaxRequestsPerChild 4000 \子进程最多能处理的请求数量。在处理MaxRequestsPerChild个请求之后, 子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)

      worker的默认配置:<IfModule worker.c>StartServers 4  \\开启自启进程数为4MaxClients 300 \\最大并发数MinSpareThreads 25  \\最小空闲线程个数MaxSpareThreads 75 \\最大空闲线程ThreadsPerChild 25 \\每个进程开启的线程数MaxRequestsPerChild 0  \\无限制</IfModule>
  • DSO:Dynamic Shared Object
    加载动态模块配置

    /etc/httpd/conf/httpd.conf
    配置指定实现模块加载格式:
    LoadModule
    模块文件路径可使用相对路径:
    相对于ServerRoot(默认/etc/httpd) )
    示例:
    LoadModule auth_basic_module modules/mod_auth_basic.so
  • 定义 'Main' server的文档页面路径

      DocumentRoot “/path”文档路径映射:DocumentRoot 指向的路径为URL路径的起始位置示例:DocumentRoot "/app/data“http://HOST:PORT/test/index.html --> /app/data/test/index.html注意:SELinux和iptables的状态
  • 定义默认站点主页面

    DirectoryIndex index.html index.html.var \当web目录下没有主页文件index.html时,默认显示页面文件为index.html.var页面,存放路径为/var/www/error/noindex.html,通过文件/etc/httpd/conf.d/welcome.conf文件配置

  • 站点访问控制常见机制

    可基于两种机制指明对哪些资源进行何种访问控制访问控制机制有两种:客户端来源地址,用户账号
    文件系统路径:
    <Directory “/path">
    ...

    <File “/path/file”>
    ...

    <FileMatch "PATTERN">
    ...

      URL路径:<Location "">...</Location><LocationMatch "">...</LocationMatch>示例:<FilesMatch "\.(gif|jpe?g|png)$"><Files “?at.*”> 通配符<Location /status><LocationMatch "/(extra|special)/data">
  • 中“基于源地址”实现访问控制

    (1) Options:后跟1个或多个以空白字符分隔的选项列表
    在选项前的+,-表示增加或删除指定选项
    常见选项:
    Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户,index默认关闭
    FollowSymLinks:允许访问符号链接文件所指向的源文件,FollowSymLinks默认开启
    None:全部禁用
    All:全部允许
    注意:index选项默认关闭,FollowSymLinks默认开启

      示例:<Directory "/web/docs">                    Options Indexes FollowSymLinks</Directory><Directory /web/docs/spec>  \\子目录的设置不受父目录的影响,可单独设置独立生效Options FollowSymLinks</Directory><Directory /web/docs>Options Indexes FollowSymLinks</Directory><Directory /web/docs/spec>Options +Includes -Indexes</Directory>

    (2) AllowOverride
    与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName 指定)文件中,覆盖之前的配置指令
    只对语句有效
    AllowOverride All:所有指令都有效
    AllowOverride None:.htaccess 文件无效
    AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都无法覆盖
    示例:
    vim /etc/httpd/conf/httpd.conf
    AccessFileName .htaccess

              DocumentRoot "/var/www/html"<Directory />AllowOverride All</Directory>[root@danran error]# vim /var/www/html/.htaccess   option indexes followSymlinks  \\"/var/www/html"目录的访问权限以此设置生效 

    (3) order和allow、deny
    order:定义生效次序;写在后面的表示默认法则
    Order allow,deny
    Order deny,allow
    Allow from, Deny from
    来源地址:
    IP
    网络:
    172.16
    172.16.0.0
    172.16.0.0/16
    172.16.0.0/255.255.0.0

      示例:<files "*.txt">order deny,allowdeny from 172.16. 100.100allow from 172.16</files><files "*.txt">order allow,denydeny from 172.16.100.100allow from 172.16</files>DocumentRoot "/app/web"<Directory />order allow,deny \\deny覆盖allow,最后的生效deny from 192.168.198.134 \\拒绝134的访问allow from 192.168.198.134 \\运行134访问</Directory>
  • 日志设定

    日志类型:
    访问日志
    错误日志
    错误日志:
    ErrorLog logs/error_log
    LogLevel warn
    loglevel 可选值:
    debug,info,notice,warn,error crit,alert,emerg

    日志记录等级:(/etc/httpd/conf/httpd.conf)
    LogLevel warn

    访问日志:(/etc/httpd/conf/httpd.conf)
    定义日志格式:LogFormat format strings
    LogFormat "%h %l %u %t "%r" %>s %b
    "%{Referer}i" "%{User-Agent}i"" cdanran
    使用日志格式:
    CustomLog logs/access_log danran
    参考帮助:
    http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
    %h 客户端IP地址
    %l 远程用户,启用mod_ident才有效,通常为减号“-” ”
    %u 验证(basic,digest)远程用户,非登录访问时,为一个减号“-”
    %t 服务器收到请求时的时间
    %r First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本
    %>s 响应状态码
    %b 响应报文的大小,单位是字节;不包括响应报文http首部
    %{Referer}i 请求报文中首部“referer” 的值;即从哪个页面中的超链接跳转至当前页面的
    %{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序
  • 设定默认字符集

    AddDefaultCharset UTF-8

    中文字符集:GBK,GB2312, GB18030

  • 定义路径别名

    格式:Alias /URL/ "/PATH/"
    DocumentRoot "/www/htdocs"
    http://www.magedu.com/download/bash.rpm ==>/www/htdocs/download/bash.rpm

      Alias /download/ "/rpms/pub/"http://www.magedu.com/download/bash.rpm==>/rpms/pub/bash.rpmhttp://www.magedu.com/images/logo.png==>/www/htdocs/images/logo.png

    示例:
    alias "/download" "/app/download/" \/app/download/原路径必须有/,若/app/download则不能正确访问

      正则表达式匹配AliasMatch ^/danran/(.*)$ /app/danran$1  \\通过访问danran目录下的文件则将对应/app/danran$1对应的文件
  • 基于用户的访问控制

    认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
    认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

    认证方式两种:
    basic:明文
    digest:消息摘要认证,兼容性差
    安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
    用户的账号和密码
    虚拟账号:仅用于访问某服务时用到的认证标识
    存储:文本文件,SQL数据库,ldap目录存储,nis等

    basic认证配置示例:
    (1) 定义安全域
    <Directory “/path">
    Options None
    AllowOverride None \启用.htaccess文件编辑配置信息
    AuthType Basic \验证方式
    AuthName "String“ \验证信息描述
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" \认证文件路径
    Require user username1 username2 ... \允许文件的指定用户访问
    Require valid-user \允许文件中所有用户均可访问

          允许账号文件中的所有用户登录访问:Require valid-user        (2) 提供账号和密码存储(文本文件)使用专用命令完成此类文件的创建及用户管理htpasswd [options] /PATH/HTTPD_PASSWD_FILE username-c:自动创建文件,仅应该在文件不存在时使用-m:md5格式加密-s:sha格式加密-D:删除指定用户

    基于组账号进行认证
    (1) 定义安全域
    <Directory “/path">
    AuthType Basic
    AuthName "String“
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE"
    AuthGroupFile "/PATH/HTTPD_GROUP_FILE"
    Require group grpname1 grpname2 ...

    (2) 创建用户账号和组账号文件;
    组文件:每一行定义一个组
    GRP_NAME: username1 username2 ...

    示例 (基于用户和组账号认证):
    htpasswd -c /etc/httpd/conf.d/.htuser httpuser1 \创建http服务的账号及密码,默认加密类型为md5加密,初次创建http用户需使用-c新建/etc/httpd/conf.d/.htuser用户账号密码的存储文件,/etc/httpd/conf.d/.htuser存储文件路径,可自定义其他路径
    htpasswd -s /etc/httpd/conf.d/.htuser httpuser2 \-s指定加密类型为sha

      echo '<h1>/app/web/admin/</h1>' > /app/web/admin/index.html  新建/app/web/admin目录,指定访问此目录时需使用账号登录setfacl -m u:apache:r /etc/httpd/conf.d/.htuser  \\授权apache读文件的权限1. 基于/etc/httpd/conf/httpd.conf配置文件验证vim /etc/httpd/conf/httpd.confDocumentRoot "/app/web/"<Directory /app/web/admin>authtype basicauthname "admin directory"authuserfile "/vim /etc/httpd/conf.d/.htuser"require user httpuser1 httpuser2 Require valid-user \\允许文件中所有均可访问</Directory>2. 基于.htaccess文件验证,文件可存放在web访问路径下vim /etc/httpd/conf/httpd.confDocumentRoot "/app/web/"<Directory /app/web/admin>allowoverride authconfig</Directory>vim /app/web/admin/.htaccessauthtype basicauthname "admin directory"authuserfile "/etc/httpd/conf.d/.htuser"Require valid-user3. 基于组文件用户验证vim /etc/httpd/conf.d/.htgroupg1:httpuser1 httpuser2g2:httpuser3vim /app/web/admin/.htaccess authuserfile "etc/httpd/conf.d/.htuser"authtype basicauthname "admin directory"authuserfile "/etc/httpd/conf.d/.htuser"authgroupfile "etc/httpd/conf.d/.htgroup"Require group g1 \\允许g1访问

    远程客户端和用户验证的控制
    Satisfy ALL|Any
    ALL客户机IP 和用户验证都需要通过才可以
    Any客户机IP和用户验证, 有一个满足即可
    示例:
    Require valid-user
    Order allow,deny
    Allow from 192.168.1
    Satisfy Any

  • 虚拟主机

    站点标识:socket
    IP相同,但端口不同
    IP不同,但端口均为默认端口
    FQDN不同;
    请求报文中首部
    Host: www.danran.com
    有三种实现方案:
    基于ip:为每个虚拟主机准备至少一个ip地址
    基于port:为每个虚拟主机使用至少一个独立的port
    基于FQDN:为每个虚拟主机使用至少一个FQDN
    注意:一般虚拟机不要与main 主机混用;因此,要使用虚拟主机,一般先禁用main主机
    禁用方法:注释中心主机DocumentRoot指令即可

    虚拟主机的配置方法:

    ServerName FQDN
    DocumentRoot “/path"

    建议:上述配置存放在独立的配置文件中

      其它可用指令:ServerAlias:虚拟主机的别名;可多次使用ErrorLog:错误日志CustomLog:访问日志<Directory “/path"></Directory>Alias

    基于IP的虚拟主机示例:
    <VirtualHost 172.16.100.6:80>
    ServerName www.a.com
    DocumentRoot "/www/a.com/htdocs"

      <VirtualHost 172.16.100.7:80>ServerName www.b.netDocumentRoot "/www/b.net/htdocs"</VirtualHost><VirtualHost 172.16.100.8:80>ServerName www.c.orgDocumentRoot "/www/c.org/htdocs"</VirtualHost>

    基于端口的虚拟主机:可和基于IP的虚拟主机混和使用
    listen 808
    listen 8080
    <VirtualHost 172.16.100.6:80>
    ServerName www.a.com
    DocumentRoot "/www/a.com/htdocs"

      <VirtualHost 172.16.100.6:808>ServerName www.b.netDocumentRoot "/www/b.net/htdocs"</VirtualHost><VirtualHost 172.16.100.6:8080>ServerName www.c.orgDocumentRoot "/www/c.org/htdocs"</VirtualHost>

    基于FQDN的虚拟主机:
    NameVirtualHost :80 httpd2.4 不需要此指令
    <VirtualHost
    :80>
    ServerName www.a.com
    DocumentRoot "/www/a.com/htdocs"

      <VirtualHost *:80>ServerName www.b.netDocumentRoot "/www/b.net/htdocs"</VirtualHost><VirtualHost *:80>ServerName www.c.orgDocumentRoot "/www/c.org/htdocs"</VirtualHost>

    示例(三个基于IP的虚拟主机):
    新建三个目录/app/web1、/app/web2、/app/web3用来用虚拟主机的根目录
    mkdir /app/web1/ /app/web2/ /app/web3/
    echo 'welcome /app/web1/danran' > /app/web1/index.html
    echo 'welcome /app/web2/danran' > /app/web2/index.html
    echo 'welcome /app/web3/danran' > /app/web3/index.html
    setenfore 0
    iptables -F

      新建vhosts配置文件,用于编辑虚拟主机的配置信息(也可在/etc/httpd/conf/httpd.conf文件中直接修改)vim /etc/httpd/conf.d/vhosts.conf \\(复制/etc/httpd/conf/httpd.conf文件中的最后几行虚拟主机的配置)<VirtualHost 192.168.198.136:80> \\指定虚拟主机的IP和端口ServerAdmin danran.com  \\指定web主机的邮件地址DocumentRoot /app/web1 \\虚拟主机的根目录ServerName  www.web1.com \\对应web服务的全称域名ErrorLog logs/web1_error_log \\虚拟主机web服务的错误日志记录CustomLog  logs/web1_access_log common \\\\虚拟主机web服务的访问日志记录</VirtualHost><VirtualHost 192.168.198.137:80> \\指定虚拟主机的IP和端口DocumentRoot /app/web2  \\虚拟主机的根目录ServerName www.web2.comErrorLog logs/web2_error_logCustomLog logs/web2_access_log common</VirtualHost><VirtualHost 192.168.198.138:80>DocumentRoot /app/web3ServerName www.web3.comErrorLog logs/web3_error_logCustomLog logs/web3_access_log common</VirtualHost>

    示例(基于端口的虚拟主机)
    新建三个目录/app/web1、/app/web2、/app/web3用来用虚拟主机的根目录
    mkdir /app/web1/ /app/web2/ /app/web3/
    echo 'welcome /app/web1/danran' > /app/web1/index.html
    echo 'welcome /app/web2/danran' > /app/web2/index.html
    echo 'welcome /app/web3/danran' > /app/web3/index.html
    setenfore 0
    iptables -F

      新建vhosts配置文件,用于编辑虚拟主机的配置信息(也可在/etc/httpd/conf/httpd.conf文件中直接修改)vim /etc/httpd/conf.d/vhosts.conf \\(复制/etc/httpd/conf/httpd.conf文件中的最后几行虚拟主机的配置)Listen 192.168.198.136:8001 \\监听192.168.198.136主机的8001端口Listen 192.168.198.136:8002 \\\\监听192.168.198.136主机的8002端口Listen 192.168.198.136:8003 \\\\监听192.168.198.136主机的8003端口<VirtualHost 192.168.198.136:8001>DocumentRoot /app/web1ServerName www.web1.comErrorLog logs/web1_error_logCustomLog logs/web1_access_log common</VirtualHost><VirtualHost 192.168.198.136:8002>DocumentRoot /app/web2ServerName www.web2.comErrorLog logs/web2_error_logCustomLog logs/web2_access_log common</VirtualHost><VirtualHost 192.168.198.136:8003>DocumentRoot /app/web3ServerName www.web3.comErrorLog logs/web3_error_logCustomLog logs/web3_access_log common</VirtualHost>访问测试192.168.198.136:8001192.168.198.136:8002www.web1.com(需配置域名DNS解析实现)

    示例(基于FQDN名称的虚拟主机)
    新建三个目录/app/web1、/app/web2、/app/web3用来用虚拟主机的根目录
    mkdir /app/web1/ /app/web2/ /app/web3/
    echo 'welcome /app/web1/danran' > /app/web1/index.html
    echo 'welcome /app/web2/danran' > /app/web2/index.html
    echo 'welcome /app/web3/danran' > /app/web3/index.html
    setenfore 0
    iptables -F

      新建vhosts配置文件,用于编辑虚拟主机的配置信息(也可在/etc/httpd/conf/httpd.conf文件中直接修改)vim /etc/httpd/conf.d/vhosts.conf \\(复制/etc/httpd/conf/httpd.conf文件中的最后几行虚拟主机的配置# Use name-based virtual hosting.NameVirtualHost *:80 \\基于虚拟主机的名称,对应所有主机的IP的80端口<VirtualHost *:80>DocumentRoot /app/web1ServerName www.web1.comErrorLog logs/web1_error_logCustomLog logs/web1_access_log common</VirtualHost><VirtualHost *:80>DocumentRoot /app/web2ServerName www.web2.comErrorLog logs/web2_error_logCustomLog logs/web2_access_log common</VirtualHost><VirtualHost *:80>DocumentRoot /app/web3ServerName www.web3.comErrorLog logs/web3_error_logCustomLog logs/web3_access_log common</VirtualHost>客户端测试:vim /etc/hosts \\编辑主机名解析,通常利用DNS来解析192.168.198.136 www.web1.com www.web2.com www.web3.com curl www.web1.comcurl www.web2.comcurl www.web3.com注意:定义了基于主机名称的虚拟主机,则其他主机失效,若访问其他的web主机,则默认访问第一个web的虚拟主机
  • status页面

    LoadModule status_module modules/mod_status.so

    vim /etc/httpd/conf.d/status.conf

      ExtendedStatus On \\显示扩展信息<Location /server-status>SetHandler server-status \\系统内部指令Order deny,allow \\设置权限顺序Deny from allAllow from 172.16 \\除了172.16允许其他都拒绝</Location>

    ExtendedStatus On 显示扩展信息

    访问:
    192.168.198.136/server-status

      结果如下Apache Server Status for 192.168.198.136Server Version: Apache/2.2.15 (Unix) DAV/2 SVN/1.6.11Server Built: Mar 22 2017 06:52:55Current Time: Tuesday, 04-Jul-2017 20:52:00 CSTRestart Time: Tuesday, 04-Jul-2017 20:52:00 CSTParent Server Generation: 0Server uptime:2 requests currently being processed, 0 idle workersWWSSSSSS........................................................................................................................................................................................................................................................Scoreboard Key:"_" Waiting for Connection, "S" Starting up, "R" Reading Request,"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,"C" Closing connection, "L" Logging, "G" Gracefully finishing,"I" Idle cleanup of worker, "." Open slot with no current processPID Key: 6426 in state: W ,   6427 in state: W ,   6428 in state: S 6429 in state: S ,   6430 in state: S ,   6431 in state: S 6432 in state: S ,   6433 in state: S ,To obtain a full report with current status information you need to use the ExtendedStatus On directive.Apache Server at 192.168.198.136 Port 80
  • 使用mod_deflate模块压缩页面优化传输速度

    适用场景:
    (1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持
    (2) 压缩适于压缩的资源,例如文本文件

          LoadModule deflate_module modules/mod_deflate.so  \\指定加载模块SetOutputFilter DEFLATE \\开始默认压缩# Restrict compression to these MIME typesDeflateCompressionLevel 9 \\压缩比AddOutputFilterByType DEFLATE text/plainAddOutputFilterByType DEFLATE text/htmlAddOutputFilterByType DEFLATE application/xhtml+xmlAddOutputFilterByType DEFLATE text/xmlAddOutputFilterByType DEFLATE application/xmlAddOutputFilterByType DEFLATE application/x-javascriptAddOutputFilterByType DEFLATE text/javascriptAddOutputFilterByType DEFLATE text/css# Level of compression (Highest 9 - Lowest 1)    DeflateCompressionLevel 9 \\默认压缩比排除特定旧版本的浏览器,不支持压缩Netscape 4.x has some problems.BrowserMatch ^Mozilla/4 gzip-only-text/html# Netscape 4.06-4.08 have some more problemsBrowserMatch ^Mozilla/4\.0[678] no-gzipInternetMatch Explorer标识本身为“Mozilla / 4”,但实际上是能够处理请求的压缩。如果用户代理首部匹配字符串“MSIE”(“B”为单词边界),就关闭之前定义的限制# MSIE masquerades as Netscape, but it is fineBrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

    示例(数据压缩后传输):
    vim /etc/httpd/conf.d/vhosts.conf
    <VirtualHost *:80>
    DocumentRoot /app/web2
    ServerName www.web2.com
    ErrorLog logs/web2_error_log
    CustomLog logs/web2_access_log common
    LoadModule deflate_module modules/mod_deflate.so

          SetOutputFilter DEFLATEDeflateCompressionLevel 9# Restrict compression to these MIME typesAddOutputFilterByType DEFLATE text/plainAddOutputFilterByType DEFLATE text/htmlAddOutputFilterByType DEFLATE application/xhtml+xmlAddOutputFilterByType DEFLATE text/xmlAddOutputFilterByType DEFLATE application/xmlAddOutputFilterByType DEFLATE application/x-javascriptAddOutputFilterByType DEFLATE text/javascriptAddOutputFilterByType DEFLATE text/css客户端访问curl --compressed -I www.web2.com
  • http重定向https

    将http请求转发至https的URL
    重定向
    Redirect [status] URL-path URL

    status状态:
    Permanent:Returns a permanent redirect status (301) indicating that the resource has moved permanently
    Temp:Returns a temporary redirect status (302). This is the default

    示例:
    vim /etc/httpd/conf.d/vhosts.conf

          <VirtualHost *:80>DocumentRoot /app/web3ServerName www.web3.comErrorLog logs/web3_error_logCustomLog logs/web3_access_log commonRedirect temp / https://www.web1/com</VirtualHost>访问测试:http://www.web3/com  \\将会自动跳转到https://web1.com
  • HSTS

    HSTS:HTTP Strict Transport Security
    服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程
    HSTS preload list 是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表

    实现HSTS
    Header always set Strict-Transport-Security "max-age=15768000"
    RewriteEngine on
    RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]

    示例:
    vim /etc/httpd/conf.d/vhosts.conf
    <VirtualHost :80>
    DocumentRoot /app/web3
    ServerName www.web3.com
    ErrorLog logs/web3_error_log
    CustomLog logs/web3_access_log common
    Header always set Strict-Transport-Security "max-age=15768000"
    RewriteEngine on
    RewriteRule ^(/.
    )$ https://%{HTTP_HOST}$1 [redirect=301]

    访问测试:
    http://www.web3/com \将会自动跳转到https://web3.com

转载于:https://www.cnblogs.com/JevonWei/p/7275844.html

相关文章:

[导入]C#中实现Socket端口复用

一、什么是端口复用&#xff1a;   因为在winsock的实现中&#xff0c;对于服务器的绑定是可以多重绑定的&#xff0c;在确定多重绑定使用谁的时候&#xff0c;根据一条原则是谁的指定最明确则将包递交给谁&#xff0c;而且没有权限之分。这种多重绑定便称之为端口复用。 二、…

数据结构学习系列文章合集

数据结构学习系列文章目录前言1.稀疏数组和队列稀疏数组和二位数组的转换数组队列的实现环形队列的介绍与实现2.链表单链表的增、删、改、查总结前言 学习数据结构记录&#xff0c;作为自己的笔记&#xff0c;同时也可以方便大家一起交流和学习 1.稀疏数组和队列 稀疏数组和二…

支付宝Payto接口的c#.net实现

它现在这种支付方式比较多象网银在线等使用的方法都是url验证&#xff0c;就是通过url参数和一个这些url参数的md5编码来确认这个连接的正确性&#xff0c;支付宝在你购买成功后跳转自定义连接的时候会传2次过来&#xff0c;第一次是数据底层请求&#xff0c;第二次是web请求&a…

【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton

概述 在ComponentOne Enterprise .NET控件集中&#xff0c;FlexGrid表格控件是用户使用频率最高的控件之一。它是一个功能强大的数据管理工具&#xff0c;轻盈且灵动&#xff0c;以分层的形式展示数据&#xff08;数据呈现更加直观&#xff09;。 FlexGrid 简介 FlexGrid 是业界…

如何 SQL Server 2005 实例之间传输登录和密码

INTRODUCTION 本文介绍如何不同服务器上的 Microsoft SQL Server 2005 实例之间传输登录和密码。 本文, 服务器 A 和服务器 B 是不同的服务器。 此外, 服务器 A 和 B 服务器都运行 SQL Server 2005。 将数据库从服务器 A 上的 SQLServer 实例移到 B, 服务器上的 SQLServer 实例…

IDEA配置GitHub报错GitHub Invalid authentication data.404 Not Found-Not Found

登录账户GitHub Invalid authentication data.404 Not Found-Not Found报错及解决办法1 登录自己的github账号--》头像---》settting2 Developer settings3 Personal access tokens4 回到IDEA中&#xff0c;粘贴上自己的token就可以了想要把自己的代码上传到GitHub中&#xff0…

console.log 简写

console.log 简写 平常代码调试总会用到console.log&#xff0c;但是每次写这么长也是很麻烦&#xff0c;就想着存一个简介一点的变量&#xff1b; 然后就随手写了下面代码&#xff1b; var a 10;var log console.log;log(a);调用的时候发现火狐浏览器报错了&#xff0c;仔细…

为何我的BLOG不能DIY?

今天想把MODULE调整一下&#xff0c;居然搞不定。估计是服务器又出问题了........不知道51CTO有没有备份我们的博克呀&#xff1f;

Java中的自动装箱和拆箱

自动装箱和拆箱自动装箱和拆箱自动装箱&#xff1a;拆箱1. 为什么要有包装类(或封装类&#xff09;2. 基本数据类型与对应的包装类&#xff1a;3. 类型间的转换4. 何时发生自动装箱和拆箱赋值、数值运算时方法调用时&#xff1a;自动装箱、拆箱中的坑自动装箱和拆箱 目的&…

【Java】身份证号码验证

代码引用自&#xff1a;https://gitee.com/appleat/codes/ynrtqujv0wfgesm8ia9b547 1 package xxx;2 3 /**4 * Created by wdj on 2017/6/21.5 */6 7 import java.text.ParseException;8 import java.text.SimpleDateFormat;9 import java.util.Calendar;10 import java.util…

linux history记录格式修改

#保存一万条命令记录 sed -i s/^HISTSIZE1000/HISTSIZE10000/g /etc/profile#在/etc/profile的文件尾部添加如下行数配置信息 ######jiagu history xianshi######### USER_IPwho -u am i 2>/dev/null | awk {print $NF} | sed -e s/[()]//g if [ "$USER_IP" &quo…

从EAI到SOA

写在前面SOA现在越发闹腾的厉害了&#xff0c;各种宣传越来越多&#xff0c;都把SOA吹上天&#xff1b;到底SOA是什么&#xff0c;有啥神奇之处&#xff0c;真的想宣传说的那么好吗&#xff1f;看了种种文章&#xff0c;只是越发混沌。罢了&#xff0c;俺做技术的&#xff0c;商…

用C#实现FTP搜索引擎

晚辈最近用C#写了一个教育网FTP搜索引擎&#xff0c;希望能得到高手的指点。 网址&#xff1a;http://soso.ccnu.com.cn http://it.ccnu.edu.cn/soso 部分代码&#xff1a; using System;using softplib;using System.Threading;using System.Collections;using System.Ne…

IDEA配置GitHub和Gitee

IDEA配置GitHub和GiteeIDEA配置GitHub和GiteeGit准备IDEA内配置Git配置GitHub1. IDEA的Settings-->Version Control ---> GitHub2. 登录账户GitHub Invalid authentication data.404 Not Found-Not Found报错及解决办法2.1 登录自己的github账号--》头像---》settting2.2…

MATLAB 2014a (8.3) Compiler Runtime (MCR)

在安装的时候可以 ./install -H 界面化安装到自己目录下 MATLAB 2014a (8.3) Runtime Compiler (MCR) Errors when trying to launch deployed (using deploy tool) application in Ubuntu 13.04. Right after installation of MCR if one runs the deployed application follo…

[Quiz]竞赛题目 Word Trace

一、竞赛题目Problem Statement You are given a String[] grid representing a rectangular grid of letters. You are also given a String find, a word you are to find within the grid. The starting point may be anywhere in the grid. The path may move up, down, le…

c#总结最近的几项重要代码

java的代码就不说了&#xff0c;毕竟不是我的主业。 1.c#数据库连接池Hikari. (1)动态加载各类数据库驱动 &#xff08;2&#xff09;支持简单配置文件 &#xff08;3&#xff09;支持按照名称多数据库调用 &#xff08;4&#xff09;使用简洁 单数据库使用&#xff1a; Hikari…

动态模板列更新数据分页的例子

前台&#xff1a;<% Page language"c#" Codebehind"WebForm30.aspx.cs" AutoEventWireup"false" Inherits"csdn.WebForm30" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML>…

[您有新的未分配科技点]可,可,可持久化!?------0-1Trie和可持久化Trie普及版讲解...

这一次&#xff0c;我们来了解普通Trie树的变种&#xff1a;0-1Trie以及在其基础上产生的可持久化Trie&#xff08;其实&#xff0c;普通的Trie也可以可持久化&#xff0c;只是不太常见&#xff09; 先简单介绍一下0-1Trie&#xff1a;一个0-1Trie节点只有两个子节点&#xff0…

SQL查询1064报错 [ERR] 1064 - You have an error in your SQL syntax; check the manual.......

MySQL建表出现1064问题问题 SQL语句 DROP DATABASE IF EXISTS bookstore; DROP DATABASE bookstore; USE bookstore; CREATE TABLE t_user (id INT PRIMARY KEY auto_increment,username VARCHAR ( 20 ) NOT NULL UNIQUE,password VARCHAR ( 32 ) NOT NULL,email VARCHAR ( …

移动端丨-webkit-overflow-scrolling:touch属性导致页面卡住

起因 起因-webkit-overflow-scrolling问题解决方案&#xff1a; 方案一方案二思考为什么会出现这个问题总结故事的起因是&#xff0c;在一个多列表的页面上&#xff0c;页面在iOS11&#xff0c;跟iOS10中会发生页面卡住&#xff0c;不能进行滚动。 然后就怀疑是自己的样式写的出…

瑞星杀毒软件所有监控已禁用!

瑞星杀毒软件所有监控已禁用! 我的瑞星杀毒软件所有监控已禁用!在右下脚有个红色的小伞,可以升级,但是监控怎么都开启不了。 解决办法是&#xff1a;启动主程序&#xff0c;点“工具列表”&#xff0c;选择“瑞星监控中心”&#xff0c;点“运行”&#xff0c;在弹出的窗口…

Typora输出表情 Typora_Smile

文章目录小表情还挺好看的SmileNatureObjectsPlacesSymbols小表情还挺好看的 Smile &#x1f604; :smile:&#x1f606; :laughing:&#x1f60a; :blush:&#x1f603; :smiley:☺️ :relaxed:&#x1f60f; :smirk:&#x1f60d; :heart_eyes:&#x1f618; :kissing_hear…

COOKIE操作

import scrapyclass CookiedemoSpider(scrapy.Spider):name cookiedemo# allowed_domains [www.douban.com]start_urls [https://www.douban.com/accounts/login/]def parse(self, response):# 登录成功后对页面数据进行存储fp open("main.html", "w",…

01--安装Activiti流程设计器eclipse插件

Activiti1 安装流程设计器eclipse插件   Name:Activiti BPMN 2.0 designer&#xff08;随便起个名字&#xff09;   Location: http://activiti.org/designer/update/ 安装完成后勾选(不勾选不生成bpmn文件) 转载于:https://www.cnblogs.com/miye/p/7283468.html

许美静《盖被》

空白时光有你来填满可以是平静或灿烂有时浓有时淡心胸要宽广才能够经得起波浪在旅途中风起和云涌每个人都会有起落有时浮有时沉有时没方向有时在雾里向前闯一生中难免常会有不如意道路太平坦会失去了勇气就(让)算天塌下来把它当被盖我只想好好过现在日子太贫乏会失去了意义万里…

SBO顾问的收入

SAP顾问的收入&#xff0c;在很多文章都有专门记载了&#xff0c;有些人比我更熟悉。差别也是比较大&#xff0c;在我熟悉的行业SAP business one产品中&#xff0c;我给大家说说我所知道的sbo顾问的收入&#xff0c;给希望入这个行业的人或感兴趣的人一点小小的提示。总体来说…

带无线网卡的电脑开启热点

带无线网卡的电脑开启热点 文章目录带无线网卡的电脑开启热点准备&#xff1a;共享WiFi的建立建立Bat批处理文件准备&#xff1a; 无线网卡 大部分笔记本自带或USB无线网卡 验证你的无线网卡是否支持承载网络 按winR调出命令行&#xff0c;输入命令netsh wlan show drivers在…

BZOJ2275[Coci2010]HRPA——斐波那契博弈

题目描述 N个石子&#xff0c;A和B轮流取&#xff0c;A先。每个人每次最少取一个&#xff0c;最多不超过上一个人的个数的2倍。取到最后一个石子的人胜出&#xff0c;如果A要有必胜策略&#xff0c;第一次他至少要取多少个。 输入 第一行给出数字N&#xff0c;N<10^15.第二行…

MonoRail学习笔记一:一个小例子

随着微软放出消息&#xff0c;准备发布MVC的框架&#xff0c;各种议论纷至沓来。以前用java、jsp对它的MVC结构、集中控制印象特别深刻&#xff0c;自从用了.NET后&#xff0c;虽然webform的控件很好用&#xff0c;总感觉有点怪怪的在网上搜了一下&#xff0c;发现早就有了Mono…