• httpd2.4常用配置


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


    httpd 2.4配置

    • 切换使用的MPM

        Centos7:/etc/httpd/conf.modules.d/00-mpm.conf
        启用要启用的MPM相关的LoadModule指令即可
      	centos 6编译安装:
        vim /etc/httpd24/httpd.conf
            Include /etc/httpd24/extra/httpd-mpm.conf
            LoadModule mpm_event_module
            modules/mod_mpm_event.so
      示例:
        vim /etc/httpd/conf.modules.d/00-mpm.conf
            LoadModule mpm_event_module modules/mod_mpm_event.so \启用event工作模式。并关闭原来的perfork工作模式
        
        systemctl restart httpd
      
        另一台主机测试访问速度
            ab -c 100 -n 1000 http://172.16.253.105/
      
    • 主目录 (修改主目录时,还需打开目录的访问权限,默认权限是关闭的)

        DocumentRoot /path
      
        示例:
        vim /etc/httpd/conf/httpd.conf
            DocumentRoot "/app/web1"
            <DocumentRoot "/app/web1"> \打开访问权限允许所有人访问
                require all granted
            </Directory>
      
    • 基于IP的访问控制:

        依赖模块mod_authz_core
      

      官方文档:http://httpd.apache.org/docs/2.4/de/mod/mod_authz_core.html

        无明确授权的目录,默认拒绝
        允许所有主机访问:Require all granted
        拒绝所有主机访问:Require all denied
        控制特定的IP访问:
        	Require ip IPADDR:授权指定来源的IP访问
        	Require not ip IPADDR:拒绝特定的IP访问
        控制特定的主机访问:
        	Require host HOSTNAME:授权特定主机访问
        	Require not host HOSTNAME:拒绝
        	HOSTNAME:
            	FQDN:特定主机
            	domin.tld:指定域名下的所有主机
                    
        不能有失败,至少有一个成功匹配
        	<RequireAll>
            	Require all granted
            	Require not ip 172.16.100.2  拒绝特定IP
        	</RequireAll>
        多个语句有一个成功,即成功
        	<RequireAny>
            	……
        	</RequireAny>
      
        示例 (仅允许某主机或host访问时必须放在<RequireAll>中) 
        <Directory "/app/web1">
            <RequireAll>
             require ip 192.168.198.1 \仅允许192.168.198.1访问
            </RequireAll>
        </Directory>
        
        <Directory "/app/web1">
            <RequireAll>
            require all granted \允许所有主机访问
             require not ip 192.168.198.1 \但拒绝192.168.198.1访问 \仅允许192.168.198.1访问
            </RequireAll>
        </Directory>
      
    • 虚拟主机

        基于FQDN的虚拟主机也不再需要	NameVirutalHost指令
        <VirtualHost *:80>
            ServerName www.b.net
            DocumentRoot "/apps/b.net/htdocs"
            ErrorLog logs/web1_error_log \虚拟主机web服务的错误日志记录
            CustomLog  logs/web1_access_log common \\虚拟主机web服务的访问日志记录
            <Directory "/apps/b.net/htdocs">
                Options None
                AllowOverride None
                Require all granted
            </Directory>
                </VirtualHost>
      

      注意:任意目录下的页面只有显式授权才能被访问

        示例 (两个基于FQDN的虚拟主机)
        	vim /etc/httpd/conf.d/vhost.conf
            	<Virtualhost *:80>
            	DocumentRoot /app/web1
            	servername www.danran.com
                	<Directory /app/web1>
                    	require all granted
                	</Directory>
            	</Virtualhost>
      
      
            	<Virtualhost *:80>
            	DocumentRoot /app/web2
            	servername www.jevon.com
                	<Directory /app/web2>
                   	 	require all granted
                	</Directory>
            	</Virtualhost>
        访问:(有域名解析的前提)
        	http://www.danran.com
        	http://www.jevon.com
      
    • ssl:安装mod_ssl,和httpd-2.2 相同配置(也可以使用CA证书同httpd2.2一样)

        yum -y install mod_ssl
        ll /etc/httpd/conf.modules.d/00-ssl.conf   \生成mod_ssl配置文件
        https://192.168.198.124
      
    • 持久连接

        官方文档:http://httpd.apache.org/docs/2.4/de/mod/core.html#keepalive
      
        KeepAlive on
        KeepAliveTimeout #ms
        MaxKeepAliveRequests 100
        毫秒级持久连接时长定义
      
        示例:
        	vim /etc/httpd/conf.d/vhost.conf
            	<Virtualhost *:80>
            	DocumentRoot /app/web1
            	servername www.danran.com
            	KeepAlive on
            	KeepAliveTimeout 15000 \毫秒为单位
            	MaxKeepAliveRequests 100
            	<Directory /app/web1>
                	require all granted
            	</Directory>
            	</Virtualhost>
      
    • Sendfile机制

        不用sendfile的传统网络传输过程:
        	read(file,tmp_buf,len)
        	write(socket,tmp_buf,len)
      
        硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >>  协议栈
      
        一般网络应用通过读硬盘数据,写数据到socket来完成网络传输,底层执行过程:
        	1. 系统调用read()从产生一个上下文切换:从user mode切换到kernel mode,然后DMA个执行拷贝,把文件数据从硬盘读到一个 kernel buffer  里。
        	2. 数据从kernel buffer到拷贝到user buffer用,然后系统调用read()返回,这时又产生一个上下文切换:从kernel mode切换到user mode
        	3. 系统调用write()从产生一个上下文切换:从user mode切换到kernel mode,然后把步骤2读到user buffer到的数据拷贝到kernel buffer(数据第2次拷贝到kernel buffer的),不过这次是个不同的kernel buffer个,这个buffer和socket相关联。
        	4. 系统调用write()从返回,产生一个上下文切换:从kernel mode到切换到user mode(第4次切换), 然后DMA从 从kernel buffer拷贝数据到协议栈(第4 次拷贝)
        	上面4个步骤有4次上下文切换,有4次拷贝,如果能减少切换次数和拷贝次数将会有效提升性能
      
        在kernel2.0+用版本中,系统调用sendfile()就是用来简化上面步骤提升性能的。sendfile()不但能减少切换次数而且还能减少拷贝次数
      
        用sendfile()来进行网络传输的过程:
        	sendfile(socket, file, len);
        	硬盘 >> kernel buffer ( 快速拷贝到kernel socket buffer)协议栈
        1 系统调用sendfile()通过DMA到把硬盘数据拷贝到kernel buffer被 ,然后数据被kernel与直接拷贝到另外一个与socket相关的kernel buffer有 。这里没有user mode和kernel mode  之间的在切换,在kernel个中直接完成了从一个buffer到另一个buffer的拷贝。
        2 DMA把数据从kernel buffer直接拷贝给协议栈,没有切换,也不需要数据从user mode拷贝到kernel mode,因为数据就在kernel里
      
    • 反向代理服务器

        启用反向代理
        	ProxyPass "/" "http://www.danran.com/" \将访问web时自动调转到http://www.danran.com/
        	ProxyPassReverse "/" "http://www.danran.com/"
      

      特定URL反向代理
      ProxyPass "/danran" "http://www.danran.com/" 访问danran目录时跳转
      ProxyPassReverse "/danran" http://www.danran.com/

        示例:
        	vim /etc/httpd/conf.d/vhost.conf
            	<Virtualhost *:80>
                	DocumentRoot /app/web2
                	servername www.jevon.com
                	ProxyPass / http://172.16.251.4/
                	ProxyPassReverse / http://172.16.251.4
                	<Directory /app/web2>
                    	require all granted
                	</Directory>
            	</Virtualhost>
            
            	vim /etc/httpd/conf.d/vhost.conf
            	<Virtualhost *:80>
                	DocumentRoot /app/web2
                	servername www.jevon.com
                	ProxyPass /danran http://172.16.251.4/danran
                	ProxyPassReverse /danran http://172.16.251.4/danran
                	<Directory /app/web2>
                    require all granted
                	</Directory>
            	</Virtualhost>
        
        	访问测试:
            	[root@danran ~]# curl http://172.16.251.4
            	welcome danran
            
            	[root@danran ~]# curl http://www.jevon.com
            	welcome danran
      

    其他常用配置同 httpd2.2一致

    	httpd2.2常用配置
    	http://119.23.52.191/httpd%E5%B8%B8%E7%94%A8%E9%85%8D%E7%BD%AE/
    danran
  • 相关阅读:
    Tomcat5配置mysql
    Eclipse完全手册
    MBR是什么
    必杀技公布——用特征码定位关键代码,秒杀MFC程序
    Google C++编程命名约定
    认识硬盘主引导扇区
    c++ const 用法详解
    主引导区
    C++ 关于struce结构体字节对齐
    Fedora 显示设备配置工具介绍
  • 原文地址:https://www.cnblogs.com/JevonWei/p/7287349.html
Copyright © 2020-2023  润新知