试用了几天Cloudflare加racknerd的2h2g的小鸡,感觉还算差强人意。所以干脆就先把博客放这里算了,然后又突发奇想,其他的网站一直用的lnmp,为啥博客就不能用用lamp呢?况且apache在稳定性以及对php的支持等方面都比nginx要好,nginx的优势是轻便和并发能力强。其实对小博客来说,基本没有啥区别。

说折腾就折腾,编译安装apache,发现需要重新设置虚拟主机,设置的时候发现,不像nginx的时候,脚本提示把http301到https,什么www域名301到一级域名等,这些提示都没有。也没有设置伪静态的选项。网上查了一下,发现是几行代码就可以搞定的事情。

设置301跳转

在apache里设置301跳转很简单,只需要在.htaccess里添加代码就好了,老刘主要用到两个,一个是http跳到https,一个是www跳到一级域名。感觉比nginx要简洁一些,代码如下:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://iliu.org/$1 [R,L]

RewriteEngine On
RewriteCond %{HTTP_HOST} !^iliu.org$ [NC]
RewriteRule ^(.*)$ http://iliu.org/$1 [L,R=301]

设置后才发现,设置和不设置没有啥区别,老刘用的cf,应该是在cf里设置了301到443接口了,至于wordpress伪静态的问题,也是很容易,直接到wordpress的后台,保存一下固定链接样式就行了,保存后在根目录里自动生成了.htaccess。代码如下:

# BEGIN WordPress
# 在“BEGIN WordPress”与“END WordPress”之间的指令(行)是
# 动态生成的,只应被WordPress过滤器修改。
# 任何对标记之间的指令的修改都会被覆盖。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

使用cloudflare后获取用户真实IP

由于apache已经自带mod_remoteip模块,所以只需按如下操作即可

#启用模块
vim /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-remoteip.conf
#添加如下内容
vim /usr/local/apache/conf/extra/httpd-remoteip.conf
LoadModule remoteip_module modules/mod_remoteip.so
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1/24
#CloudFlare IP Ranges
RemoteIPInternalProxy 103.21.244.0/22
RemoteIPInternalProxy 103.22.200.0/22
RemoteIPInternalProxy 103.31.4.0/22
RemoteIPInternalProxy 104.16.0.0/12
RemoteIPInternalProxy 108.162.192.0/18
RemoteIPInternalProxy 131.0.72.0/22
RemoteIPInternalProxy 141.101.64.0/18
RemoteIPInternalProxy 162.158.0.0/15
RemoteIPInternalProxy 172.64.0.0/13
RemoteIPInternalProxy 173.245.48.0/20
RemoteIPInternalProxy 188.114.96.0/20
RemoteIPInternalProxy 190.93.240.0/20
RemoteIPInternalProxy 197.234.240.0/22
RemoteIPInternalProxy 198.41.128.0/17 #你的CDN的IP,可以重复添加
#在httpd.conf中修改日志格式,在日志格式中加上%a,然后重启apache即可
LogFormat "%h %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %a %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combined

service httpd restar重启apache,然后去日志里看看,已经获得了真实IP。前连天灰常记忆博友说在cloudflare里设置一下也能显示真实IP,但是老刘没有找到这个设置,只好继续在网站上改了,网站上改还有一个好处是,这个方法不仅限于cloudflare,别的CDN也是适用的