cloudflare做cdn加速,并在服务器记录真实客户端ip

一、准备工作

1、准备一个域名,与cloudflare账户绑定。

2、准备一个服务器,与域名绑定,并搭建http/https服务器,可以用apache,也可以用nginx,我用的apache。

3、用邮箱注册一个cloudflare账号,注册过程比较简单,不赘述。

二、绑定域名与cloudflare账户

注册cloudflare账户后,会有add site按钮,按照提示一步一步操作,其中比较关键的是修改域名的域名控制服务器,默认的是域名注册商的域名控制服务器。

该操作需要登录到域名账户下,按照cloudflare的提示,把域名控制服务器修改成cloudflare的域名控制服务器。一般有两个。

三、服务器搭建http/https服务

yum install httpd可以直接安装apache服务,安装完成后,service httpd start启动http服务。

如果要搭建https服务,需要yum install mod_ssl openssl

安装完mod_ssl后,在/etc/httpd/conf.d/下可以看到ssl的配置文件ssl.conf,ssl相关的配置在该文件中修改,其中比较重要的是监听端口、证书、日志。

1、监听端口在配置文件中为

Listen 443

如果有需要可以修改(记得开启防火墙相应端口)。

2、证书的配置为:

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

根据需要把上述两个配置修改正确。

关于证书,如果用cloudflare加速,cloudflare提供免费的签名证书可以使用(cloudflare面板上显示“小锁Crypto”图标的按钮),如果自己没有签名证书,最好不要用自签名的证书,因为cloudflare认为你的网站不安全,通过cloudflare访问不通。

用cloudflare的免费证书时,点击cloudflare面板上显示“小锁Crypto”图标的按钮

首先选择第一项选择:Full (strict)

然后,去签发证书,往下拉到Origin Certificates项目点击右侧Create Certificate(创建证书)

创建一个二级域名,有效期默认15年,下一步就可以看到生成了证书和私钥

拷贝证书保存成xxx.crt文件,拷贝私钥保存成xxx.key,把这两个文件放到https服务器中的指定目录,并保证上述ssl.conf配置中证书和私钥的配置正确。

service httpd restart重启http服务,应该需要把/etc/httpd/conf/httpd.conf中的Listen 80注释掉。

至此,通过域名就可以访问到你的网站了。

cloudflare免费证书可以参考这里https://www.qwblog.cn/cloudflare-ssl.html

另外,也可以用openssl生成自签名的证书,命令如下

生成私钥

openssl genrsa -out server.key 2048

生成签名请求

openssl req -new -key server.key -out server.csr

生成签名证书

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

3、日志的配置

默认的日志记录

http:/var/log/httpd/access_log

https:/var/log/httpd/ssl_access_log

对于经过cloudflare加速后,你会发现默认日志中只记录了cloudflare的ip,看不到真正访问网站的客户端ip。

其实cloudflare在转发请求时在X-Forwarded-For字段已经携带了该信息,可以通过修改日志来记录该ip。

http:

vi /etc/httpd/conf/http.conf

LogFormat "\"%{X-Forwarded-For}i\" %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

LogFormat "%{X-Forwarded-For}i" X-Forwarded-For

保存修改,重启http服务即可

https:

https的略有不同,我的做法是自定义一个log文件,自定义格式。

vi /etc/httpd/conf.d/ssl.conf

在末尾增加

CustomLog logs/ssl_my_log combined

其中combined的格式在http.conf中已经定义。

 

你可能感兴趣的:(linux)