Tom cat корм для кошек производитель
最近有个朋友的网站出现无法回调的情况,现象为502错误,原因在于他网站加了CDN百度云加速,导致我支付系统无法异步回调通知
经过查询各种资料,问题发现在于https
相关文章:nginx反向代理,支持SNI的https回源
最关键的一句proxy_ssl_server_name on最关键的,也就是把主机名字传递给后端服务器,让对方服务器在TLS握手层面就可以收到host,便于打到具体的主机。(nginx 1.7开始支持)
server {
listen 80;
server_name hidden.com;
resolver 114.114.114.114;
proxy_ssl_server_name on;
location / {
proxy_pass $http_x_target;
}
}
搬瓦工云服务器要到期了,速度太慢,不再续费咯
本博客原先是基于国外搬瓦工服务器进行反向代理绕过备案
原文https://tom.cat/?p=39
后来改进了一下,使用自定义请求头,阿里云对80端口扫描拦截非备案域名流量,是依据请求头的host来识别,改成8888端口后,又遭遇流量限速的问题,这个当初用日本的云服务器测试过得出来的结论,即国外服务器反代进来用备案域名访问速度非常快,非备案的基本上打开网页都困难,速度极其的慢。
解决方式如下
国内阿里云服务器端nginx配置
server {
listen 8888;
server_name ~^(www.)?(.+)$;
location / {
proxy_redirect off;
proxy_set_header Host $http_x_host_x;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($http_x_host_x = ‘tom.cat’) {
proxy_pass https://localhost:8089;
break ;
}
if ($http_x_host_x = ‘whois.ci’) {
proxy_pass https://localhost:8089;
break ;
}
proxy_pass https://localhost:8088;
}
}
国外搬瓦工服务器端nginx配置
server {
listen 80;
server_name tom.cat;
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Host-X $host;
proxy_pass https://www.xxx.com:8888/;
}
}
server {
listen 80;
server_name whois.ci;
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Host-X $host;
proxy_pass https://www.xxx.com:8888/;
}
}
http配置节点需增加underscores_in_headers on;启用自定义请求头
nginx接收自定义请求头需要注意,搬瓦工端用X-Host-X,阿里云端用$http_x_host_x接收,即大写转小写,中横线转下划线,加 http_ 前缀
以上这样配置解决了访问速度的问题,接下来进入正题,现在搬瓦工不续费了,采用CDN来替代搬瓦工这个角色
CDN服务商:https://cdn.umistrong.com.cn/
进CDN后台添加域名,业务区域选择无备案,源站地址需要填写已备案的域名
添加域名后,按照要求认证域名并添加cname解析
进域名高级设置–>Header配置–>请求头配置
进域名缓存配置–>缓存规则表–>缓存规则
搞定结束!
越来越发觉nginx是个神器,从上次隐藏回调IP,现在再次利用它来隐藏邮件发送的源站IP!
这两天网站加了CDN,目的是隐藏源站IP,现在问题来了,前置CDN解决了IP暴露问题,但是对于使用邮件注册会员的系统来说,就产生了IP暴露的问题,我们来看看是怎么回事
我使用的是QQ域名邮箱,显示邮件原文后就可以看到源站IP,这不是直接脱了裤子让人家打吗,问题总是需要解决的,研究了下nginx的用法,发现nginx可以TCP反代,这可是好东西啊!
先设置源站的nginx配置文件
stream {
upstream mail.com {
server 172.16.110.13:465 weight=1;
server 172.16.110.12:465 weight=1;
server 172.16.110.14:465 weight=1;
}
server {
listen 465;
proxy_pass mail.com;
}
}
然后设置源站的hosts文件
127.0.0.1 mail.com
最后设置3台代理服务器的nginx配置
stream {
server {
listen 465;
proxy_pass smtp.qq.com:465;
}
}
因为使用的是SSL,采用465端口,自己看就明白了,举一反三,其他端口应该也差不多!
邮件配置
email.host=mail.com
email.port=465
email.username=service@umistrong.com.cn
email.password=password
email.from=service@umistrong.com.cn
最后贴一下我用的邮件发送工具类,是SSL版本的
import java.security.GeneralSecurityException;
import java.util.; import javax.mail.;
import javax.mail.internet.*;
import com.sun.mail.util.MailSSLSocketFactory;
public class EmailUtils {
private static String host = PropertiesUtils.getProperties().getProperty(“email.host”);
private static String port = PropertiesUtils.getProperties().getProperty(“email.port”);
private static String userName = PropertiesUtils.getProperties().getProperty(“email.username”);
private static String password = PropertiesUtils.getProperties().getProperty(“email.password”);
private static String from = PropertiesUtils.getProperties().getProperty(“email.from”);
public static void sendHTMLEmail(String to,String subject,String content) throws GeneralSecurityException{
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty(“mail.smtp.host”, host);
properties.put(“mail.smtp.port”, port);
properties.put(“mail.smtp.auth”, “true”);
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put(“mail.smtp.ssl.enable”, “true”);
properties.put(“mail.smtp.ssl.socketFactory”, sf);
// 获取默认session对象
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(userName,password); //发件人邮件用户名、密码
}
});
try{
// 创建默认的 MimeMessage 对象
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: 头部头字段
message.setSubject(subject);
// 设置消息体
message.setContent(content,”text/html; charset=utf-8″);
// 发送消息
Transport.send(message);
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
这样搞完以后,对原先支付系统无需任何改动,只需要改动配置文件的邮件发送服务器地址即可,负载均衡发邮件,美滋滋!!!
收工睡觉,哈哈哈!
之前开发了一套聚合支付系统——优米云支付https://pay.umistrong.com.cn/
虽然目前系统没有遭遇DDOS攻击,但是还是需要未雨绸缪,避免未来可能发生的攻击,对云服务器隐藏IP是有必要的。
我们都知道,网站前置CDN进行IP隐藏很容易,但是对于支付系统这类需要对商户网站进行回调,由于是用本系统发起对商户网站的http请求,自然会有IP暴露的问题。
实现隐藏IP有3个思路
方案1.使用apache的httpclient进行代理访问
//设置代理IP、端口、协议(请分别替换)
HttpHost proxy = new HttpHost(“你的代理的IP”, 8080, “http”);
//把代理设置到请求配置
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setProxy(proxy)
.build();
//实例化CloseableHttpClient对象
CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();
//访问目标地址
HttpGet httpGet = new HttpGet(“https://www.baidu.com”);
//请求返回
CloseableHttpResponse httpResp = httpclient.execute(httpGet);
try {
int statusCode = httpResp.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
System.out.println(“成功”);
}
} catch (Exception e) {
} finally {
httpResp.close();
}
第一种方案,需要在每个代理服务器安装代理软件,并且有多台代理时候,依赖支付系统内轮询做负载均衡。
方案2.开发扩展模块,支付系统调用扩展模块接口进行通信
第二种方案,扩展模块需要部署到每个代理服务器,假设扩展模块用java开发,就需要每台服务器安装JRE,也很麻烦,负载均衡可在支付系统做也可在扩展模块做。
方案3.使用nginx的反向代理,在java发起请求时候,自定义header携带网址参数,nginx端设置proxy_pass 使用获取到的header参数即可
第三种方案就简单了,依靠nginx自带的负载均衡,本文重点说的这个方案,非常灵活!!!
java代码部分,增加X-Target的header
URL url = new URL(“hidden.com”);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestProperty(“X-Target”, requestUrl);//requestUrl为商户网站回调地址
hosts文件设置本地解析,支付系统和nginx负载均衡放同一服务器上
127.0.0.1 hidden.com
nginx负载均衡端配置underscores_in_headers必须开,否则nginx无法接收自定义header,proxy_set_header X-Target也要加,这个需要向下级nginx传递header,nginx获取自定义header的写法$http_前缀加上名称小写且中划线变成下划线,这里upstream我用了三台服务器,权重都是1,平均分配
http {
underscores_in_headers on;
upstream hidden.com {
server 172.16.110.13:80 weight=1;
server 172.16.110.12:80 weight=1;
server 172.16.110.14:80 weight=1;
}
server {
listen 80;
server_name hidden.com;
location / {
proxy_set_header X-Target $http_x_target;
proxy_pass https://hidden.com;
}
}
}
nginx代理端配置, resolver一定要加,不然会出现502错误
server {
listen 80;
server_name hidden.com;
resolver 8.8.8.8;
location / {
proxy_pass $http_x_target;
}
}
至此配置完成,后续增加代理服务器就很方便了,可以在负载均衡端增加节点,或者在代理服务器下继续传递X-Target,理论上是无限级传递。
看到好多从V2EX来的朋友
目前能追溯到的历代本域名持有者
第一任: baigreen
第二任: wework
第三任: XuJianHua
第四任: 524758861 我
第一任持有者从12年就开始使用此域名后缀邮箱,但是域名是18年注册的,应该是未续费导致域名删除被第二任持有者抢注
需要准备的
可备案且已备案域名一个,我用了个.com域名
无法备案域名一个,就是现在这个tom.cat
国内云服务器,我用的阿里云
国外云服务器,我用的搬瓦工,最便宜的那个
nginx的nginx.conf配置文件加上如下配置信息
server {
listen 80;
server_name tom.cat;
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_pass https://www.xxx.com:8888/;
}
}
server_name 是需要绑定的域名,并且域名A记录指向国外服务器IP
proxy_pass 这个是国内访问的地址,域名A记录需要指向国内云服务器,端口号可以带,也可以不带,这里需要分情况讨论
如果不配置 proxy_set_header Host $host; 就可以在 proxy_pass 中使用80端口,如果配置了此参数,就需要使用非80端口,因为阿里云对解析至国内阿里云服务器的未备案域名根据请求头的 Host 进行拦截。
这里我选择了配置 proxy_set_header Host $host; 参数,并在国内服务器使用8888端口,因为我的另一项目需要检测来路域名,根据实际的来路域名显示不同的信息,也就是java中的request.getServerName()获取到浏览器是通过哪个域名进行访问的。如果不配置,在反向代理时候 Host 不会被转发,导致真实的来路域名丢失,进而 request.getServerName() 只会获取到 www.xxx.com 而不是真正的tom.cat
也许有人会问,既然国外都有服务器,直接把网站安装在国外不是更简单吗,这里我说明下,我买的是搬瓦工的linux主机,最便宜那款,一年才 $18.89 USD,我本身对linux就不怎么会,能把nginx装好就很不错了,再去学安装php和mysql估计得吐血,并且买的这款国外服务器配置很差劲,便宜没好货你懂得。
顺便说下我国内云服务器的配置,WIN2012 64位,4H8G5M
我最近的创业项目,跟域名行业有点像,关键点就是一个字——靓
项目用的域名QLLH.COM也是从许建华手里买来的,一如既往的基友价。低于四声行情价收来的。
域名正好对应网站名称——麒麟靓号,一个销售手机靓号的网站,网站一开始并不叫这个名字,是后来域名到手后根据字母想出来的,和许总商量了2个名字,麒麟靓号和青龙靓号,我选择了前者,因为麒麟有祥瑞的寓意。麒麟靓号网站虽然简陋一些,但是该有的功能都有了,性能也相当不错,技术方面采用spring+springMVC+mybatis开发,由于19年6月时候第一次创业失败后,急忙转型至靓号行业,一开始就对市面上现成的手机号销售网站源码不太满意,并且基本上同行都是用同一套程序,外观方面千篇一律,就算勉强用上,未来二次开发也不容易,毕竟现成的玩意是ASP.NET语言写的,于是决定自己开发一个全新的网站,陆陆续续开发了4个月,终于在10月国庆后正式上线了。网站上线之前也提早开通了百度推广账户,正好赶上福州百度8月底的开户活动。
说到搜索引擎推广开户,还真是不得不从百度先开始开,这样会省下一大笔开户费,百度这个搜索引擎行业的霸主,自然不可能免开户费,不过可以趁着活动,开户费有便宜一些,并且对后续360搜索,搜狗,UC神马这几个平台的开户都有切切实实的优惠,至于哪些优惠我就告诉大家吧,百度推广户开通后,我们的一些企业信息也会通过他们行业渠道流到各个平台,这在行业里头应该算是信息共享,搜狗、UC神马、360搜索几个服务商就开始陆陆续续找上我,他们给出的条件都不错,都是主动提出免开户费以及降低推广户的预存门槛,这对初次创业的人来说可以省下不少的钱,从 搜狗、UC神马、360搜索 这3家来说,我省了至少一万二的开户费用,并且开户时间要选择在月底和年底,销售冲业绩的时候,优惠力度最大,这是我总结到的经验。
未完待续更新中。。。
本博客域名TOM.CAT,从好友手里收来的,至于收来的价格,友情价,捡漏价,抄底价。
域名的原主人是非主流域名圈内的大佬——许建华,此人富得流油,却经常对我哭穷。
之所以用此域名做博客,跟本人职业有关,没猜错,JAVA程序猿一只。
.cat 后缀域名不能备案,所以不能用国内服务器,不过这博客是部署在国内服务器上,用国外的搬瓦工反向代理至国内阿里云,算是勉强能用吧,访问速度有些慢。至于为何不直接部署在搬瓦工,原因当然是买的最便宜的搬瓦工,配置很辣鸡,并且不怎么会用linux,好吧,暴露了,我不是一个合格的程序员,哈哈,丢人呐。
准备过阵子有钱了换个香港的服务器
初次玩博客,对WordPress也不是很懂,以后再慢慢完善咯。
有想交换友链的朋友在博客中留言哦。
在日常生活中,猫已经是最常见的动物。但在社交网络上,猫已超脱了本身,形成了一股猫文化。
当然这篇文章并不是在探讨如何撸猫,而是向大家介绍今天的主角 TOM.CAT (域名),提起这只猫的名字你一定会觉得熟悉,毕竟汤姆猫杰瑞鼠深入人心,当然 TOM.CAT 所拥有的含义也不仅仅只是动画片中的汤姆猫,由大家自行补充吧。
.Cat域名后缀目前建站必须使用或含有当地语言或当地文化,不强制要求全部为当地语言或文化。可建立多语言站点,但:多语言必须包含其中有当地语言即可。
Источник
2
2
1
2
2
1
1
1
1
1
1
1
1
1
2
3
1
1
1
1
2
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
Самым популярным продуктом у владельцев домашних кошек являются сухие корма. Их изготавливают из качественного сырья, которое идет на пользу здоровью животного. В составе кормов присутствуют и мясные, и рыбные компоненты. Они приходятся по вкусу даже самым привередливым котам.
Преимущества
В интернет-магазине можно купить сухие корма для кошек, которые соответствуют стандартам качества. Они имеют массу преимуществ перед другими продуктами питания:
- Являются источником питательных веществ, витаминов и минералов, которые требуются организму питомца.
- Не требуют специального приготовления.
- Хорошо насыщают.
- Нормализуют работу пищеварительного тракта.
Подходящие продукты удастся подобрать для котят и взрослых питомцев. В отельную категорию следует отнести товары, предназначенные для животных с чувствительным пищеварением и другими индивидуальными особенностями организма.
Особенности кормления
Порция сухого корма определяется на основе возраста питомца и индивидуальных особенностей его организма. Особенно тщательно следует подбирать суточную норму для беременных и кастрированных животных. То же касается котов с чувствительным пищеварением.
Кошек рекомендуется кормить сухим кормом два-три раза в день небольшими порциями. Его требуется совмещать с другой едой. Важно позаботиться о наличии питьевой воды, к которой питомец всегда должен иметь свободный доступ.
Купить сухие корма для кошек можно с доставкой по населенным пунктам России. Для заказа потребуется авторизоваться на сайте. На выбор доступны несколько вариантов быстрой оплаты покупки. Она проводится путем безналичного расчета банковской картой или через систему электронных платежей. Оплатить товары необходимо в течение трех суток после оформления заказа.
Источник