新服务器的Apache Rewrite问题

新装了一台服务器(CentOS 7.3, Apache 2.4.6, PHP 7.1.6),迁移网站应用到上面,网站文件都放在 /var/www/目录下。访问时候发现如下问题:

采用ThinkPHP开发的A应用,可以通过 http://www.a.com/index.php/Home/Abc/def 来访问

但不能通过 http://www.a.com/Home/Abc/def 来访问

也就是访问地址中没法省略掉index.php。一开始把PathInfo 和Rewrite搞混淆了,以为是前者的问题。

后来发现其实这明显是 Rewrite的问题,因为虽然ThinkPHP代码根目录下面默认有.htaccess文件,但服务器的配置有可能禁止站点自行配置。从以上症状来看正是Rewrite规则根本没起作用。

最后找到开关其实在这里:

找到apache配置文件:/etc/httpd/conf/httpd.conf

找到 对应目录的配置处,修改 AllowOverride All:

<Directory “/var/www”>
AllowOverride All
</Directory>

CentOS 6.8服务器给Apache下的站点配置Let’s Encrypt 证书

我们有几个站点,之前用的wosign的免费SSL证书,最近在Chrome中查看站点,都提示是不安全的站点,应该是wosign的不佳的国际声誉连累的。
于是决定换成Let’s Encrypt证书。方法不难,参看:官方文档

有几个注意点:

如果用自动化的配置certbot-auto的话,它会自动找 /etc/httpd/conf.d 文件夹下面的站点配置文件,但只对配置文件里面仅配置了一个80端口的情况有效,如果您的一个配置文件里面配置了多个80端口的站点,则不能自动识别。另外,如果已经自行配置了ssl站点(443端口的virtualhost)的话,也不会再自动识别为需要配置的站点。

我自动化配置了两个站点,先将原来的的配置文件里面的ssl配置(443端口的virtualhost)注释掉了。然后用certbot-auto,选择了识别出来的这两个站点,然后一切自动运行,提示证书生成,且生成了新的配置文件,文件名 www.example.com-le-ssl.conf。

这时候访问网站,是一片空白,服务器端没有输出任何东西。事实证明,自动生成的这个https站点的配置还是有一些问题的:

1,没有指定DocumentRoot;

2,整个配置文件用了<IfModule mod_ssl.c></IfModule>,但其实本机的环境里面没有包含这样的文件,而mod_ssl确实是启用的,在/etc/httpd/modules/文件夹下可以看到有mod_ssl.so。因此果断注释掉了IfModule的语句(本以为也可改为IfModule nod_ssl.so,但发现不起作用),再次打开,网站成功显示,且证书确实已更新为letsencrypt证书。

CentOS+Apache环境下安装gitlab

环境:CentOS 6.8,  Apache 2.22.15

先根据官方教程,安装omnibus版本的安装包。官方源速度太慢,镜像选择了清华tuna。安装过程一路顺利。

关键是配置,gitlab默认内嵌nginx服务器,如果要使用Apache的话,需要禁用掉先,否则开机会报80端口冲突(话说这两天服务器被我重启了三四次。。。,之前170天左右稳定运行没动过)。

设置workhouse tcp连接,本机 127.0.0.1 端口8181

具体参考:

http://docs.gitlab.com/omnibus/settings/nginx.html#using-a-non-bundled-web-server

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#using-a-non-bundled-web-server

看文档,SELinux环境下需要做一些配置,本次安装因为本机SELinux已经禁用,因此没有遇到。

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#selinux-modifications

根据使用的gitlab版本及本机apache版本,选择一个合适的配置文件,本机参考了:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/master/web-server/apache/gitlab-omnibus-apache22.conf

启动服务器,报503错误,查httpd的日志,发现Apache没有与127.0.0.1:8181连上。

 

 

如果要配置HTTPS访问,则配置文件参考:

https://gitlab.com/gitlab-org/gitlab-recipes/blob/8-1-stable/web-server/apache/gitlab-omnibus-ssl-apache22.conf

配置编辑完成后重启httpd,结果报错:

Invalid command ‘SSLCompression’, perhaps misspelled or defined by a module not included in the server

查了一下,是因为Apache版本太低(2.22.15)的原因,起码需要2.22.24。针对低版本的临时解决方案如下:

修改 /etc/sysconfig/httpd文件,添加如下语句:

export OPENSSL_NO_DEFAULT_ZLIB=1

参考:https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache#other-httpd-security-considerations

然后重启结果还是不行。—暂时没解决,谋求升级系统。

参考:

http://serverfault.com/questions/455450/how-to-disable-sslcompression-on-apache-httpd-2-2-15-defense-against-crime-bea

http://serverfault.com/questions/508520/how-to-disable-ssl-tls-compression-in-apache-2-2-16

网站实现HTTPS协议

HTTPS协议的作用和好处就不多说了。

整个过程的步骤,一是要找到一个证书。

二是安装证书,尤其对于一台服务器部署多个虚拟站点的情况。

证书方面,虽然自己也可以制作,但用户访问的时候,会提示需要用户接受该证书,这个很不友好。换成浏览器能接受的CA发行的证书就没有这个问题了。收费的不用说,贵的便宜的都有,一般的主机托管服务商都会有。免费的找到几家公认可以用的,一家是国内的wosign,一家是国外的startcom,应该都好用,免费ssl主要是针对域名进行验证的,申请过程中需要证明对域名的拥有权,可以通过在网站根目录上传特定文件,或者添加特定二级域名来验证。过程中还发现赛门铁克也注册了一个叫freessl.com的网站,里面显示即将推出免费ssl,咱们拭目以待吧。

安装证书一般都有教程,本人是阿里云的ECS服务器,centos6.7 + apache,找到对应教程即可。值得注意的是,阿里云版本的ssl配置文件位置和独立安装的centos的ssl配置文件的位置稍有不一样。

可以参考:https://freessl.wosign.com/aliyun-ssl.html

由于多数免费ssl会有对应的域名限制(譬如wosign上面最多允许一个证书对应5个域名),所以当单台服务器上有超过五个站点都需要启动https的时候,需要再申请另外的ssl。这时候,需要注意ssl配置文件里面的虚拟主机的设置。要考虑用不同的端口来对应不同的证书。