设为首页 收藏本站
查看: 645|回复: 0

[经验分享] 第 四 十 三 天:Apache 的 相 关 问 题

[复制链接]

尚未签到

发表于 2018-11-20 13:47:43 | 显示全部楼层 |阅读模式
  小Q:人生的意志和劳动将创造奇迹般的奇迹。       —— 涅克拉索夫
  apache设置自定义header-----------------------------------------
  1. 在设置自定义header前,需要先检测一下你的httpd是否加载了mod_headers

  /usr/local/apache2/bin/apachectl  -l
  否则需要重新编译一下了

  2.  在httpd.conf 中加入

  
  Header add MyHeader "Hello"
  
  保存重启;双引号中的内容为自定义内容
  3. 测试
  curl  -I http://localhost      看是否显示有  MyHeader  "Hello"
  Apache设置禁止访问.txt文件---------------------------------------

  Options -Indexes   FollowSymLinks
  AllowOverride All
  Order allow,deny
  Deny from all
  访问总是指向第一个虚拟主机--------------------------------------

  在配置apache多个虚拟主机的时候,访问总是指向第一个虚拟主机,
  加上 NameVirtualHost * 后解决问题.

  NameVirtualHost *
  
  DocumentRoot "F:/web/"
  ServerName localhost
  
  日志中记录代理IP以及真实客户端IP---------------------------------

  默认情况下log日志格式为:
  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  其中%h 是记录访问者的IP,如果在web的前端有一层代理,那么这个%h其实就是代理机器的IP,这不是我们想要的。在这种情况下,
  %{X-FORWARDED-FOR}i  字段会记录客户端真实的IP。所以log日志改为:
  LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  apache的扩展模块安装 -------------------------------------------

  这个用到了apache的扩展工具  apxs ;请先确认是否已经加载了 mod_so 模块,方法是:
  /usr/local/apache2/bin/httpd -l
  下面,如何编译安装扩展模块  mod_status.so 这个模块

  /usr/local/apache2/bin/apxs  -i -a  -c  mod_status.c
  请注意,这里的mod_status.c 的路径一定要写对了,不然会报错,一般情况下,这个C文件在你的源码包下,比如:
  /usr/local/src/httpd-2.0.59/modules/generators/mod_status.c
  编译的结果类似这样:

/usr/local/services/apache-2.0.59/build/libtool --silent --mode=compile gcc -prefer-pic  -DAP_HAVE_DESIGNATED_INITIALIZER -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/services/apache-2.0.59/include  -I/usr/local/services/apache-2.0.59/include   -I/usr/local/services/apache-2.0.59/include   -c -o /root/httpd-2.0.64/modules/generators/mod_status.lo /root/httpd-2.0.64/modules/generators/mod_status.c && touch /root/httpd-2.0.64/modules/generators/mod_status.slo
/usr/local/services/apache-2.0.59/build/libtool --silent --mode=link gcc -o /root/httpd-2.0.64/modules/generators/mod_status.la  -rpath /usr/local/services/apache-2.0.59/modules -module -avoid-version    /root/httpd-2.0.64/modules/generators/mod_status.lo
/usr/local/services/apache-2.0.59/build/instdso.sh SH_LIBTOOL='/usr/local/services/apache-2.0.59/build/libtool' /root/httpd-2.0.64/modules/generators/mod_status.la /usr/local/services/apache-2.0.59/modules
/usr/local/services/apache-2.0.59/build/libtool --mode=install cp /root/httpd-2.0.64/modules/generators/mod_status.la /usr/local/services/apache-2.0.59/modules/
PATH="$PATH:/sbin" ldconfig -n /usr/local/services/apache-2.0.59/modules
----------------------------------------------------------
Libraries have been installed in:
   /usr/local/services/apache-2.0.59/modules  完成后,请看提示 Libraries have been installed in:  模块就会安装到这里了。

  通过http上传大文件超时的问题-------------------------------------

  架构是 LAMP , 上传文件的操作,并没有连接mysql,但是却使用了php资源,所以修改设置,不仅要设置apache还要设置php.ini
  1.  apache httpd.conf 的设置
  Timeout 600  这个可以设置成 3600, 单位是s
  2. php.ini 相关的参数

file_uploads  =  on  ; #默认为开
upload_max_filesize  =  1024M  ; #上传最大值
post_max_size = 1024M ; #通过表单POST给PHP的所能接收的最大值
如果还不行,那就修改以下几个参数吧。
max_execution_time = 0 ; #每个php脚本的最大执行时间,单位是秒。0表示不限制
max_input_time = 600000  ;       #传送请求数据的最大时间,秒。改的大大的…
memory_limit = 500M ;   #一个脚本占用内存的上限。这个不建议太大。万一有***,你的机器就崩溃了。建议最高256M。  mod_proxy 扩展模块安装-----------------------------------------

  首先在编译的时候加上参数--enable-proxy  --enable-proxy-http;
  如果没有编译进这个模块去?怎么办呢,可以通过扩展的方式编译一下。
  下载相同版本的apache源代码,注意,一定是要相同版本的,否则编译不能成功。
  下载后,解压
  cd  httpd-2.0.59/modules/proxy
  /usr/local/apache2/bin/apxs -c -i -a mod_proxy.c proxy_connect.c proxy_http.c proxy_util.c
  从输出里面看到apache的modules目录下已经产生了mod_proxy.so,且已经在httpd.conf中激活了
  cd /usr/local/apache2/conf/
  ls ../modules/ 看到确实有mod_prxoy.so
  编辑配置文件
  vi httpd.conf
  修改如下
  加载模块
  LoadModule proxy_module modules/mod_proxy.so (这句是编译激活时产生的)
  LoadModule proxy_http_module modules/mod_proxy.so (这句是要手动添加的)
  更改配置文件


    ServerName www.test.com
    CustomLog "/dev/null" combined
   ProxyRequests Off
        
        Order deny,allow
        Allow from all
        
    ProxyPass / http://www.test.com/
     ProxyPa***everse / 192.168.13.111/
  另外需要注意的是,需要在/etc/hosts 中加一条记录  

  192.168.13.111   www.test.com
  

  

  ====================================练习题==========================================
  1. 为什么下载源码包需要到官网上去下载?

  简单说就是为了安全,如果是非官方下载的源码包,有可能被别有用心的人动过手脚,毕竟是源码的,任何人都可以修改代码。
  

  2. 64位机器是否可以安装32位rpm包?64位机器是否可以安装32位的mysql二进制免编译包?
  64位机器是可以安装32位rpm包的,同样的64位机器也能安装32位的mysql二进制免编译包(centos5.x的确是支持,但是centos6.x不支持)。
  

  3. 编译安装apache时, 如果不加--with-included-apr  会有什么问题?
  会报错,Cannot use an external APR with the bundled APR-util,因为apr是一个底层的接口库,编译apache必须要有这个支持。
  

  4. 编译php时,必须加上 --with-apxs2=/usr/local/apache2/bin/apxs 这是什么意思呢?
  apxs是apache编译动态模块并自动配置加载到httpd.conf文件的一个工具,由于php也是作为apache的一个动态加载模块,我们编译php的目的就是为了生成这个模块,所以必须要指定apxs的地址。
  

  5. 当配置好apache的配置文件后,如何检验配置文件是否正确?
  /usr/local/apache2/bin/apachectl -t
  

  6. 如何查看80端口是否启动?
  netstat -lnp |grep ':80'
  

  7. 更改apache配置文件httpd.conf后,如何重新加载配置文件?
  /usr/local/apache2/bin/apachectl  graceful
  

  8. 如何查看apache加载了哪些模块?
  /usr/local/apache2/bin/apachectl -M
  

  9. 怎么查看php加载了哪些模块?
  /usr/local/php/bin/php -m
  

  10. 简单描述静态加载和动态共享模块的区别。
  不管编译httpd还是php,都会有一个静态模块和动态模块的概念。首先,动态和静态模块宏观上分析,静态会直接编译进httpd这个可执行文件内,而动态的模块是单独的一个文件;其次,静态模块是和httpd这个文件一同加载的,只要服务一开启就会加载所有的静态模块,而动态模块是根据需求什么时候用什么时候加载。
  

  11. 当我们配置好lamp环境后,访问php程序无法解析,你如何去排查这个问题呢?
  (1) apachectl -M 看是否加载了libphp5.so
  (2) 如果没有加载,那查看/usr/local/apache2/modules/是否有libphp5.so,然后查看httpd.conf 中是否有LoadModule libphp5.so
  (3) 再看httpd.conf中是否有 AddType application/x-httpd-php .php
  (4) apache一定要重启服务
  

  12. 如何配置apache的虚拟主机
  vim httpd.conf
  #Include conf/extra/httpd-vhosts.conf
  把该行最前面的#去掉,然后修改:

    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all

改为

    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
  再 vim  conf/extra/httpd-vhosts.conf 根据实际需求修改
  

  13. 如何配置apache的用户验证
  vi   httpd.conf
  在相应的虚拟主机配置文件段,加入

            AllowOverride AuthConfig
            AuthName "自定义的"
            AuthType Basic
            AuthUserFile /data/.htpasswd    // 这个目录你可以随便写一个,没有限制
        require valid-user
  保存后,然后创建apache的验证用户 htpasswd -c /data/.htpasswd  test

  

  14. 如何配置apache的日志以及日志按天切割
  在httpd.conf 在相应的虚拟主机配置段,加入
  CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/www.yourdomain.com-access_%Y%m%d.log 86400" combined
  注意,需要写成绝对路径,写成相对的路径可能不生效
  

  15. 如何配置apache的图片等静态文件的过期时间
  httpd.conf 中加入


    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"
    ExpiresByType application/x-javascript "now plus 2 hours"
    ExpiresByType application/x-shockwave-flash "now plus 2 hours"
    ExpiresDefault "now plus 0 min"
  

  16. 如何限定某个目录下的php文件没有执行权限
  vim httpd.conf   在相关的虚拟主机段,加入

    php_admin_flag engine off

其中 /www/htdocs/path 为要限制的目录  

  17. 如何配置apache的域名重定向
  要把访问域名 www.domain1.com 的域名转发到 www.domain2.com 上
  实现:
在相关的虚拟主机中增加
   
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.domain1.com$
        RewriteRule ^(.*)$ http://www.domain2.com/$1 [R=301,L]
   
如果是多个域名重定向到一个域名
   
        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^www.domain.com[OR]
        RewriteCond %{HTTP_HOST} ^www.domain1.com$
        RewriteRule ^(.*)$ http://www.domain2.com/$1 [R=301,L]
      

  18. 如何配置php的错误日志
  vim php.ini 检查并配置如下两项
  log_errors = On
  error_log = logs/error.log
  

  19. 如何在php中配置open_basedir, 是否可以在httpd.conf 中针对虚拟主机配置open_basedir?
  vim  php.ini
  加入  open_basedir=/var/www/
  httpd.conf中也可以针对虚拟主机限制openbasedir:
  在相对应的虚拟主机配置文件中加入:
  php_admin_value open_basedir "/var/www/htdocs"
  

  20. 如何禁止php的函数exec
  vim  php.ini  找到
  disable_functions =
  改为
  disable_functions = exec 如果是多个函数,可以在exec后面继续增加函数名用逗号分开即可
  

  21. 我们以源码安装LAMP环境时,先安装哪个,后安装哪个?为什么呢?
  安装顺序可以是 mysql apache php 也可以是 apache mysql php
  把php放到最后,这是因为安装php时,需要指定mysql安装目录,也需要指定apache的apxs工具
  

  22. 怎么确定你的php.ini 在哪个目录下?
  php -i |grep 'Configuration File'  或 usr/local/php/bin/php -i |head
  

  23. 怎么确定你的php的extension_dir 在哪里?
  php -i |grep 'extension_dir'
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-637431-1-1.html 上篇帖子: Apache快速配置 下篇帖子: apache SSL配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表