背景:网站(example.com),dns通过cloudflare pro计划设置,这提供了"灵活的ssl"(在这里阅读),这意味着ssl只存在于客户端和cloudflare之间,而不是cloudflare和服务器之间,因此不需要专用的ip和不需要在服务器上进行特殊设置.服务器设置为不使用ssl(只是一个通用网站),但是cloudflare灵活的ssl正在处理ssl方面.
语言:PHP(codeignighter,但这并不重要)
目标:浏览域"exmple.com/ "或"http:// exmple.com/ "时,生成变量"http:// example.com",并在浏览"https:// example.com"时/*"生成变量"https:// example.com".
什么应该工作(但不是):
$root = '';
if( isset($_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] != 'off' )
{
//it doesnt reach here...
$root .= 'https://';
}
else
{
$root .= 'http://';
}
$root .= "".$_SERVER['HTTP_HOST'];
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
Run Code Online (Sandbox Code Playgroud)
我总是可以做到:"// example.com",但这对我来说并没有真正解决问题.思考?我应该做一些字符串比较来确定https-ness吗?
我确定原因是当请求到达服务器(https或http)时,它来自端口80并且它不会被识别为ssl,因此未定义$ _SERVER ['HTTPS'].我可以在服务器和cloudflare之间设置一个自定义的ssl,但如果我可以使用一些正则表达式并以某种方式比较网址,那么会更好(更省力).
我还想知道可能存在的问题和漏洞.
谢谢 :)
我正在尝试设置一段代码,用于检测用户何时从欧洲国家/地区访问,我的网站位于cloudflare平台上,并且我正在使用cloudflare地理位置功能,使用以下代码:
$country_code = $_SERVER["HTTP_CF_IPCOUNTRY"];
Run Code Online (Sandbox Code Playgroud)
我不知道返回值是什么以及如何正确处理它们,显然我应该在if语句中使用if语句.
if($location == '1' || $location == '2' || $location == '3'){
//process
}else{
echo 'not Europe';
}
Run Code Online (Sandbox Code Playgroud)
所以任何人都可以帮助我找出我应该处理的价值观吗?
谢谢你的帮助!
彼得.
想知道为什么 Cloudflare 会在我已启动的服务器上引发错误?我可以通过在浏览器中访问 IP 来验证服务器是否已启动。
我检查了系统日志,apache 日志,没有发现错误。顺便说一句,我只是在静态站点上设置域.. 我不知道如何修复它。谷歌搜索并没有找到解决方案
我最近开始使用Amazon S3向访问者提供图像,因为这会减少服务器负载.现在,出现了一个新问题:今天我查看了我的AWS账单.我注意到我有一个巨大的账单等着我 - 在20天内总共有4TB的AWS数据传输.
显然这是因为大量传出的Amazon S3流量(到Cloudflare然后将其提供给访问者).现在我应该通过设置Cache头来减少所请求文件的数量(因为Cloudflare的Crawler会尊重它).我修改了我的代码:
$s3->putObjectFile($path, $bucket , 'images/'.$id.'.jpg', S3::ACL_PUBLIC_READ);
Run Code Online (Sandbox Code Playgroud)
至
$s3->putObjectFile($path, $bucket , 'images/'.$id.'.jpg', S3::ACL_PUBLIC_READ, array('Cache-Control' => 'public,max-age=31536000'));
Run Code Online (Sandbox Code Playgroud)
不过,它不起作用.Cloudflare不尊重Cache,因为Cache-Control在Header中不显示为"Cache-Control",而是显示为"x-amz-meta-cachecontrol".Cloudflare忽略了这一点.
有人有一个简单的解决方案吗?
TL; DR:我和这个人有或多或少相同的问题:http://support.bucketexplorer.com/topic734.html(那是在2008年)
编辑:我偶然发现了这一点:亚马逊S3没有缓存图像,但不幸的是,该解决方案对我不起作用.
编辑2:事实证明它没有用,因为我使用的是旧版"亚马逊S3类".我更新了,代码现在正常工作.
感谢您的时间.
我们在CloudFlare Pro上运行一个站点,该站点使用他们提供的证书进行一键加密.我们的网站为用户提供"可选"SSL.由于它是一个论坛,我们目前运行一个代理脚本,用于检测发布的图像是否未使用HTTPS协议,并通过我们服务器上运行的脚本自动代理图像,以保持安全性和我们可爱的绿色锁定!
我现在唯一的问题是,当用户不使用HTTPS时,这会在我们的服务器上引入不必要的负载,因此我们希望能够检测它们是否存在.但是,由于CloudFlare服务器实际上是连接到我们的,无论通过HTTP(因为我们在CloudFlare上使用一键式SSL),我们的PHP脚本始终报告HTTP并且即使用户使用HTTPS也不会代理图像.有没有办法让CloudFlare报告用户正在使用SSL?
首先,我想说我真的很喜欢CloudFlare!
我唯一无法理解的是,Google Analytics(分析)不会在"受众群体"报告中显示任何访问权限.虽然它显示实时访客.
昨天的观众报告显示我0次访问,而实时我可以在任何给定时间看到大约10名活跃访客.
我现在已经找了几个小时的解决方案但是找不到任何关于此事的内容.
屏幕截图位于http://srwww.eu/forumattachments/cloudflare-google-analytics.png
解决了 24小时内解决的"本身"问题.报告似乎有延迟.不确定延迟是由Google Analytics或CloudFlare引起的.
我通过内容协商提供一系列资源.具体而言,任何URL都可以用不同的格式表示,具体取决于客户端的Accept标题.
Facebook的一个例子可以在Facebook上看到:
curl -H "Accept: application/json" http://graph.facebook.com/daft-punk
curl -H "Accept: text/turtle" http://graph.facebook.com/daft-punk
我正在寻找一个基于URL和客户端标题来缓存内容的CDNAccept.
CloudFlare不支持这一点:如果一个客户端要求HTML,那么对该URL的所有后续请求都会收到HTML表示,而不管其首选项如何.其他人有类似的问题.
例如,如果我将CloudFlare置于其上graph.facebook.com(并将其配置为缓存"无扩展"资源,默认情况下不会这样),那么它将表现不正确:
http://graph.facebook.com/daft-punk通过卷曲请求JSON; http://graph.facebook.com/daft-punk通过我的浏览器(因此在HTML中); 将正确的行为将是CloudFlare的再次询问服务器,因为第二个客户端有不同的Accept标题.在此之后,Accept可以从缓存提供具有类似标头的请求.
哪些CDN解决方案支持内容协商,还缓存协商内容?
所以请注意,仅尊重接受是不够的; 协商响应也应该缓存.
PS1:很容易让自己的缓存服务器支持它.例如,对于nginx:
proxy_cache_key "$scheme$host$request_uri$http_accept";
Run Code Online (Sandbox Code Playgroud)
请注意客户端的Accept标头是如何为缓存编制索引的键的一部分.我希望在CDN上.
PS2:不能为不同的表示使用不同的URL.我的应用程序位于Linked Data域中,其中URL在识别中起着重要作用.
我在Amazon AWS上运行我的网站.
我的2个Web服务器上方有1个负载均衡器.我的负载均衡器没有静态IP地址,它有一个域名.
我希望我的流量只能通过Load Balancer来实现.我正在使用Cloudflare的DNS而不是Route53,因为这就是cloudflare指令所说的.
我不能将Load Balancer的IP放在A记录中,因为它是动态的,不能将负载均衡器的域名放在cloudflare的dns面板的A记录中(不像Route53).帮助我,我陷入了这种境地.到目前为止,cloudflare还没有提供解决方案.
有没有人遇到同样的问题?
我制作了一个不和谐的机器人,它使用 selenium 访问网站并获取信息,当我在本地运行代码时,我没有任何问题,但是当我部署到 Heroku 时,我得到的第一个 URL 将我重定向到 page Attention Required! | Cloudflare。
我努力了:
还有许多其他具有我使用的相同设置的:
options = Options()
options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
options.add_experimental_option("excludeSwitches", ["enable-logging", "enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--headless")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
self.driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), options=options)
self.driver.execute_cdp_cmd('Network.setUserAgentOverride', {
"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
Run Code Online (Sandbox Code Playgroud)
但这不起作用,代码仅在本地运行
PS:本地我在Windows上
我重定向到的页面来源:
https://gist.github.com/rafalou38/9ae95bd66e86d2171fc8a45cebd9720c

我试图让Cloudflare充当S3上托管文件的CDN,这样任何人都无法直接访问这些文件.例如:
S3桶: cdn.mydomain.com.s3.amazonaws.com
CDN(Cloudflare): cdn.mydomain.com
我想要的是能够访问cdn.mydomain.com/file.jpg(Cloudflare)但不能访问cdn.mydomain.com.s3.amazonaws.com/file.jpg(S3).
现在我在Cloudflare上配置了一个指向我的存储桶的CNAME,以及以下CORS:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过S3或CDN访问任何文件,我将被拒绝.如果我公开一个文件(也就是被授予的每个人),我可以通过S3和CDN访问该文件.
我曾试图改变AllowedOrigin用*.mydomain.com,但没有运气.
cloudflare ×10
php ×5
amazon-s3 ×2
caching ×2
cdn ×2
amazon ×1
amazon-ec2 ×1
captcha ×1
cors ×1
dns ×1
geolocation ×1
heroku ×1
http ×1
https ×1
nginx ×1
python ×1
real-time ×1
selenium ×1
ssl ×1
statistics ×1