站内公告:

SMF - Just Installed!

Main Menu

httpd.conf 里 添加代码 结果网站打开不了

作者 cnhap, 2018-01-14, 18:16:22

« 上一篇主题 - 下一篇主题 »

cnhap


LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

<IfModule mod_deflate.c>
   SetOutputFilter DEFLATE    #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩
    DeflateCompressionLevel 9  # 压缩等级 9

    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
    SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary

    AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html  text/css  text/plain等
    AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
    AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩

    BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
    BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
    BrowserMatch bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题
</IfModule>

我在 /etc/httpd/conf/httpd.conf 里 添加以上代码 结果网站打开不了。如何排除故障 难道是默认的 没有安装压缩的功能?

lonelicloud

Apache 的配置有很多规则,比如前后顺序、上下嵌套等。稍有不合规则的地方就会导致出错。

你的给出的配置,似乎是因为 `<IfModule mod_deflate.c>.........</IfModule>`的内容需要放在 `<Location /path/to/the/location></Location>` 之内。

可以参考我之前写的一篇博客:https://cnzhx.net/blog/apache-php-fpm-and-mod_deflate/
欢迎光临水景一页

问题解决后请「修改」原始帖子将其前缀改为「已解决」。

请阅读"论坛管理"里面的置顶内容,帮助维护论坛正常运行,方便你我他!

cnhap

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
#LoadModule headers_module modules/mod_filter.so
<Location />
<IfModule mod_deflate.c>
   SetOutputFilter DEFLATE    #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩
    DeflateCompressionLevel 9  # 压缩等级 9
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
    AddOutputFilter DEFLATE css js

    #SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
    #SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
    #SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
    #
    #AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html  text/css  text/plain等
    #AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
    #AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩
    #
    #BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
    #BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
    #BrowserMatch bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题
</IfModule>
</Location>
#

httpd.conf 设置成以上的信息。

重启的时候提示:

[root@cnhap ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

网页打不开

lonelicloud

那你重新布置一下上面的参数的位置试试看。下面这一部分应该在 httpd.conf 或者其调用的某个考前的配置文件中:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
#LoadModule headers_module modules/mod_filter.so
#


然后下面这一部分放到网站(主机)配置部分(<VirtualHost>)里面的 <Directory> 里面。注意我去掉了 <Location>。
<IfModule mod_deflate.c>
   SetOutputFilter DEFLATE    #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩
    DeflateCompressionLevel 9  # 压缩等级 9
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
    AddOutputFilter DEFLATE css js

    #SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
    #SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
    #SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
    #
    #AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html  text/css  text/plain等
    #AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
    #AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩
    #
    #BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
    #BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
    #BrowserMatch bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题
</IfModule>


我现在使用的 Apache/2.4.6 (CentOS) 将配置文件分成了好几个部分。除了 httpd.conf 之外,还将原来在 httpd.conf 中的几个基础的部分拆分到了 /etc/httpd/conf.modules.d/ 里面。例如 LoadModule 在 `/etc/httpd/conf.modules.d/00-base.conf` 里面。这些我在 https://cnzhx.net/blog/apache-php-fpm-and-mod_deflate/ 这里已经解释过了。因为不知道你的配置是怎么样的,全部而不是一个片段,很难确定问题所在。

另外,我发现你注释掉了处理 filter 的模块,

引用自: cnhap 于 2018-01-15, 10:34:40
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
[color=blue]#LoadModule headers_module modules/mod_filter.so[/color]
#

这是为什么呢?没有这个,下面的这个语句就没法工作了:
引用自: cnhap 于 2018-01-15, 10:34:40
.........
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php


还有,上面这句下面那句,
引用自: cnhap 于 2018-01-15, 10:34:40
.........
    AddOutputFilter DEFLATE css js

`AddOutputFilter` 是 `mod_mime` 的指示符;而 `AddOutputFilterByType` 才是 `mod_deflate` 的指示符。

你再仔细看看我上面提到的那篇博文,外加这一篇 https://cnzhx.net/blog/understanding-and-using-gzip-compression/,然后一点点的添加你需要的内容来看看究竟是哪一部分有问题。

最后,你为什么不顺便贴上出错信息呢?明明这里已经提示你通过  "systemctl status httpd.service"  和 "journalctl -xe" 来看详细的错误信息了。
引用自: cnhap 于 2018-01-15, 10:34:40
重启的时候提示:

[root@cnhap ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

网页打不开

而且,你至少需要去查看 Apache 的错误信息(CentOS 默认放在 `/var/log/httpd` 路径下面),里面肯定有这次 httpd.service 服务无法启动的原因。

像你这样提问如果放在别的论坛里可能早被喷得体无完肤了。我的耐心也是有限度的。
欢迎光临水景一页

问题解决后请「修改」原始帖子将其前缀改为「已解决」。

请阅读"论坛管理"里面的置顶内容,帮助维护论坛正常运行,方便你我他!

cnhap

先感谢楼主没有喷我,我真的是菜鸟,安装系统都是根据楼主的博文一步一步来的。对linx 系统没有一个系统的学习,可以说根本不知道哪里是哪里。

httpd.conf  里默认 没有<Location /> </Location>  之前我发的<Location /> ....</Location>里的代码我加到了httpd.conf的最后。
下面帖出我插入的内容,没有最后的<Location /> .....</Location>。

#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
#
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
# consult the online docs. You have been warned. 
#
# Configuration and logfile names: If the filenames you specify for many
# of the server's control files begin with "/" (or "drive:/" for Win32), the
# server will use that explicit path.  If the filenames do *not* begin
# with "/", the value of ServerRoot is prepended -- so 'log/access_log'
# with ServerRoot set to '/www' will be interpreted by the
# server as '/www/log/access_log', where as '/log/access_log' will be
# interpreted as '/log/access_log'.

#
# ServerRoot: The top of the directory tree under which the server's
# configuration, error, and log files are kept.
#
# Do not add a slash at the end of the directory path.  If you point
# ServerRoot at a non-local disk, be sure to specify a local disk on the
# Mutex directive, if file-based mutexes are used.  If you wish to share the
# same ServerRoot for multiple httpd daemons, you will need to change at
# least PidFile.
#
ServerRoot "/etc/httpd"
下面是我加入的
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule headers_module modules/mod_filter.so
上面是我加入的
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#


您之前说到将代码复制到主机。我添加到了 vhost.conf 里 如下:

#
# 主机 1
# cnhap.org
#
<VirtualHost *:80>
ServerAdmin admin@cnhap.org
ServerName cnhap.org
ServerAlias www
# 非常感谢 cheers 的提醒,虽然测试显示无影响,但 Apache 文档如此要求
# 注意下面这行末尾不要带 /
DocumentRoot /cnhap/www/cnhap.org/html

<Directory "/cnhap/www/cnhap.org/html/">
    Options FollowSymLinks
    # 下一行这样设置就可以在网站文件的目录中使用 .htaccess
    AllowOverride All
    # 下一行是替代 Allow from all 的新机制
    Require all granted
下面是我加入的
<IfModule mod_deflate.c>
        SetOutputFilter DEFLATE    #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩
        DeflateCompressionLevel 9  # 压缩等级 9
        AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php
        AddOutputFilter DEFLATE css js
   
        SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
        SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
        SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
       
        AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html  text/css  text/plain等
        AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩
        AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩
       
        BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的
        BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩
        BrowserMatch bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题
    </IfModule>
   上面是我加入的
</Directory>

ErrorLog /cnhap/www/cnhap.org/logs/error.log
CustomLog /cnhap/www/cnhap.org/logs/access.log combined
ServerSignature Off
</VirtualHost>


重启http服务 还是报错,感谢楼主告诉我了在哪里看log,我之前真的不知道,也不知道我看的文件名对不对。
我下载了 error_log 文件。因论坛不能上传附件,我复制最后几行如下;

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.18.79.141. Set the 'ServerName' directive globally to suppress this message
[Mon Jan 15 10:38:11.429201 2018] [auth_digest:notice] [pid 15444] AH01757: generating secret for digest authentication ...
[Mon Jan 15 10:38:11.429943 2018] [lbmethod_heartbeat:notice] [pid 15444] AH02282: No slotmem from mod_heartmonitor
[Mon Jan 15 10:38:11.431037 2018] [ssl:warn] [pid 15444] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Mon Jan 15 10:38:11.630299 2018] [mpm_prefork:notice] [pid 15444] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16 configured -- resuming normal operations
[Mon Jan 15 10:38:11.630338 2018] [core:notice] [pid 15444] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Jan 15 20:27:51.919955 2018] [mpm_prefork:notice] [pid 15444] AH00170: caught SIGWINCH, shutting down gracefully


在次感谢楼主的耐心教导。关于压缩我也百度了很多,说的设置方式都试过了。上面报错的内容我百度翻译 也没有看明白。



发帖后 我进行了以下尝试:

因我没有配置 PHP-FPM  我还没有搞明白是什么回事,所以没有配置,之前也不敢尝试用你帖上的方法。

00-base.conf  看您的回复 我下载 这个文件下来 查看 发现
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
这2句在 00-base.conf 已经有了查找不到 LoadModule headers_module modules/mod_filter.so 这句


没有搞明白哪里出的错误,我按照你的之前的帖子,在/etc/httpd/conf.d  文件夹下 创建了00-common.conf 文件夹 把你哪段内容复制上传到服务器 现在好了,不报错了,并且检查网站也启用压缩了。

我把httpd.conf 里加入的所有代码删除, 特别是 之前查的 LoadModule headers_module modules/mod_filter.so  这个 也删除了 重启http 不报错。
那么是不是可以这样理解
CentOS 7  Apache 2.4  后 不需要在 httod.conf 里添加任何代码 只要 在 /etc/httpd/conf.d 文件夹下 添加00-common.conf   这个文件 并复制你那串代码 就自动启用压缩了。并不用百度说的那样设置,先在httpd.conf 里加入2句话,在加入....

MPM event + PHP-FPM 组合 我没有设置 难道系统默认就已经有了,可以用你针对 MPM event + PHP-FPM组合模式的配置?
问题解决了但没有搞明白错误在哪里。

lonelicloud

引用自: cnhap 于 2018-01-15, 20:48:43
先感谢楼主没有喷我,我真的是菜鸟,安装系统都是根据楼主的博文一步一步来的。对linx 系统没有一个系统的学习,可以说根本不知道哪里是哪里。
刚开始学习是不容易找到方向,所以要多看别人的博客,博客上一般有例子,方便理解文档。而文档才是需要系统去看的,虽然不必一次都看完。

查错是比较困难的。以我的水平,只能一点点的试,错了就接着查,然后接着试。这样也是积累经验的过程。

引用自: cnhap 于 2018-01-15, 20:48:43
我下载了 error_log 文件。因论坛不能上传附件,我复制最后几行如下;

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.18.79.141. Set the 'ServerName' directive globally to suppress this message
[Mon Jan 15 10:38:11.429201 2018] [auth_digest:notice] [pid 15444] AH01757: generating secret for digest authentication ...
[Mon Jan 15 10:38:11.429943 2018] [lbmethod_heartbeat:notice] [pid 15444] AH02282: No slotmem from mod_heartmonitor
[Mon Jan 15 10:38:11.431037 2018] [ssl:warn] [pid 15444] AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
[Mon Jan 15 10:38:11.630299 2018] [mpm_prefork:notice] [pid 15444] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16 configured -- resuming normal operations
[Mon Jan 15 10:38:11.630338 2018] [core:notice] [pid 15444] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Jan 15 20:27:51.919955 2018] [mpm_prefork:notice] [pid 15444] AH00170: caught SIGWINCH, shutting down gracefully


注意看每条信息前面的时间是不是你尝试出错的那个时间。从这几条信息里没有看到导致 httpd 启动异常的信息。嗯,英语还是要捡起来练练啊,毕竟出错信息很少有本地化的语言。

引用自: cnhap 于 2018-01-15, 20:48:43
因我没有配置 PHP-FPM  我还没有搞明白是什么回事,所以没有配置,之前也不敢尝试用你帖上的方法。
实际上 php-fpm 只是解析 PHP 的一种配置方式。如果使用默认的,则是 Apache 自带的 mod_php 方式。不管如何,这个东西都与你要设置的 Apache 的提供传输压缩的内容无关。说明你读我那两篇博文还是不够仔细。

引用自: cnhap 于 2018-01-15, 20:48:43
00-base.conf  看您的回复 我下载 这个文件下来 查看 发现
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
这2句在 00-base.conf 已经有了查找不到 LoadModule headers_module modules/mod_filter.so 这句

这里有了前面你自己添加的就是多余的。看你后续的说明,似乎这个多余的添加并不会导致错误。

你的另外一条语句似乎是错的。我没有时间去查,不过我的 00-base.conf 文件里是有 `mod_filter` 那句的,但是跟你说的这一句不一样。我的是,
LoadModule filter_module modules/mod_filter.so

引用自: cnhap 于 2018-01-15, 20:48:43
没有搞明白哪里出的错误,我按照你的之前的帖子,在/etc/httpd/conf.d  文件夹下 创建了00-common.conf 文件夹 把你哪段内容复制上传到服务器 现在好了,不报错了,并且检查网站也启用压缩了。

我把httpd.conf 里加入的所有代码删除, 特别是 之前查的 LoadModule headers_module modules/mod_filter.so  这个 也删除了 重启http 不报错。
这个 00-common.conf 并不是标准做法,只是我自己的一个懒人的解决方法。如果你刚好在修改这一部分之后就不再遇到错误了,那说明还是之前放的位置或者语法格式有错误。要想知道到底是哪里错了,只能靠你自己慢慢排查了。

引用自: cnhap 于 2018-01-15, 20:48:43
那么是不是可以这样理解
CentOS 7  Apache 2.4  后 不需要在 httod.conf 里添加任何代码 只要 在 /etc/httpd/conf.d 文件夹下 添加00-common.conf   这个文件 并复制你那串代码 就自动启用压缩了。并不用百度说的那样设置,先在httpd.conf 里加入2句话,在加入....
再重复一次,添加 00-common.conf 只是我为了省事儿而采取的操作。这些内容你加在哪里这是没有规定的,只是需要遵守 Apache 配置文件的语法规则。

你百度到的设置可能是针对以前的那种将主要配置都放在了 httpd.conf 里面的那种做法。而你在用的时候没有把握好具体的插入位置而导致出错。这个我也记不太清楚,想知道具体是怎么错误的话我也需要去测试。但是我没有时间。

引用自: cnhap 于 2018-01-15, 20:48:43
MPM event + PHP-FPM 组合 我没有设置 难道系统默认就已经有了,可以用你针对 MPM event + PHP-FPM组合模式的配置?
目前的系统是不会默认给你配置 PHP-FPM 的,默认的应该是 mod_php 方式。而这个东西与 mod_deflate 的设置无关。
欢迎光临水景一页

问题解决后请「修改」原始帖子将其前缀改为「已解决」。

请阅读"论坛管理"里面的置顶内容,帮助维护论坛正常运行,方便你我他!

cnhap


lonelicloud

不用客气。希望以后你也能过来帮帮其他人  :)
欢迎光临水景一页

问题解决后请「修改」原始帖子将其前缀改为「已解决」。

请阅读"论坛管理"里面的置顶内容,帮助维护论坛正常运行,方便你我他!