nginx通过CORS实现跨域
1.CORS是一个W3C标准,全称是跨域资源共享(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
当前几乎所有的浏览器(Internet Explorer 8+, Firefox 3.5+, Safari 4+和 Chrome 3+)都可通过名为跨域资源共享(Cross-Origin Resource Sharing)的协议支持AJAX跨域调用。
Chrome,Firefox,Opera,Safari都使用的是XMLHttpRequest2对象,IE使用XDomainRequest。
简单来说就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域。跨域资源共享(CORS)也是未来的跨域问题的标准解决方案。
CORS提供如下Headers,Request包和Response包中都有一部分。
2.HTTP Response Header
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Allow-Methods
Access-Control-Allow-Headers
Access-Control-Expose-Headers
Access-Control-Max-Age
HTTP Request Header
Access-Control-Request-Method
Access-Control-Request-Headers
其中最敏感的就是Access-Control-Allow-Origin这个Header, 它是W3C标准里用来检查该跨域请求是否可以被通过。(Access Control Check)。如果需要跨域,解决方法就是在资源的头中加入Access-Control-Allow-Origin 指定你授权的域。
启用CORS请求
假设您的应用已经在example.com上了,而您想要从www.example2.com提取数据。一般情况下,如果您尝试进行这种类型的AJAX调用,请求将会失败,而浏览器将会出现源不匹配的错误。利用CORS后只需www.example2.com 服务端添加一个HTTP Response头,就可以允许来自example.com的请求。
将Access-Control-Allow-Origin添加到某网站下或整个域中的单个资源
Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Credentials: true (可选)
将允许任何域向您提交请求
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true (可选)
3.提交跨域请求
如果服务器端已启用了CORS,那么提交跨域请求就和普通的XMLHttpRequest请求没什么区别。例如现在example.com可以向www.example2.com提交请求。
var xhr = new XMLHttpRequest();
// xhr.withCredentials = true; //如果需要Cookie等
xhr.open(‘GET’, ‘http://www.example2.com/hello.json’);
xhr.onload = function(e) {
var data = JSON.parse(this.response);
…
}
xhr.send();选)
对于简单请求,如GET,只需要在HTTP Response后添加Access-Control-Allow-Origin。
对于非简单请求,比如POST、PUT、DELETE等,浏览器会分两次应答。第一次preflight(method: OPTIONS),主要验证来源是否合法,并返回允许的Header等。第二次才是真正的HTTP应答。所以服务器必须处理OPTIONS应答。
流程如下
首先查看http头部有无origin字段;
如果没有,或者不允许,直接当成普通请求处理,结束;
如果有并且是允许的,那么再看是否是preflight(method=OPTIONS);
如果是preflight,就返回Allow-Headers、Allow-Methods等,内容为空;
如果不是preflight,就返回Allow-Origin、Allow-Credentials等,并返回正常内容。
用伪代码表示
location /pub/(.+) {
if ($http_origin ~ <允许的域(正则匹配)>) {
add_header ‘Access-Control-Allow-Origin’ “$http_origin”;
add_header ‘Access-Control-Allow-Credentials’ “true”;
if ($request_method = “OPTIONS”) {
add_header ‘Access-Control-Max-Age’ 86400;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, OPTIONS, DELETE’;
add_header ‘Access-Control-Allow-Headers’ ‘reqid, nid, host, x-real-ip, x-forwarded-ip, event-type, event-id, accept, content-type’;
add_header ‘Content-Length’ 0;
add_header ‘Content-Type’ ‘text/plain, charset=utf-8′;
return 204;
}
}
# 正常nginx配置
……
}
Nginx配置实例
实例一:允许example.com的应用在www.example2.com上跨域提取数据
在nginx.conf里找到server项,并在里面添加如下配置
location /{
add_header ‘Access-Control-Allow-Origin’ ‘http://example.com’;
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
add_header ‘Access-Control-Allow-Headers’ ‘Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Requested-With’;
add_header ‘Access-Control-Allow-Methods’ ‘GET,POST,OPTIONS’;
…
}
如果需要允许来自任何域的访问,可以这样配置
add_header Access-Control-Allow-Origin *;
注释如下
第一条指令:授权从example.com的请求(必需)
第二条指令:当该标志为真时,响应于该请求是否可以被暴露(可选)
第三条指令:允许脚本访问的返回头(可选)
第四条指令:指定请求的方法,可以是GET, POST, OPTIONS, PUT, DELETE等(可选)
重启Nginx
$ service nginx reload
测试跨域请求
$ curl -I -X OPTIONS -H “Origin: http://example.com” http://www.example2.com
成功时,响应头是如下所示
HTTP/1.1 200 OK
Server: nginx
Access-Control-Allow-Origin: example.com
实例二:Nginx允许多个域名跨域访问
由于Access-Control-Allow-Origin参数只允许配置单个域名或者 * ,当我们需要允许多个域名跨域访问时可以用以下几种方法来实现。
方法一
如需要允许用户请求来自www.example.com、m.example.com、wap.example.com访问www.example2.com域名时,返回头Access-Control-Allow-Origin,具体配置如下
在nginx.conf里面,找到server项,并在里面添加如下配置
map $http_origin $corsHost {
default 0;
“~http://www.example.com” http://www.example.com;
“~http://m.example.com” http://m.example.com;
“~http://wap.example.com” http://wap.example.com;
}
server
{
listen 80;
server_name www.example2.com;
root /usr/share/nginx/html;
location /
{
add_header Access-Control-Allow-Origin $corsHost;
}
}
方法二
如需要允许用户请求来自localhost、www.example.com或m.example.com的请求访问xxx.example2.com域名时,返回头Access-Control-Allow-Origin,具体配置如下
在Nginx配置文件中xxx.example2.com域名的location /下配置以下内容
set $cors ”;
if ($http_origin ~* ‘https?://(localhost|www\.example\.com|m\.example\.com)’) {
set $cors ‘true’;
}
if ($cors = ‘true’) {
add_header ‘Access-Control-Allow-Origin’ “$http_origin”;
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, PUT, DELETE, OPTIONS’;
add_header ‘Access-Control-Allow-Headers’ ‘Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Mx-ReqToken,X-Requested-With’;
}
if ($request_method = ‘OPTIONS’) {
return 204;
}
方法三
如需要允许用户请求来自*.example.com访问xxx.example2.com域名时,返回头Access-Control-Allow-Origin,具体配置如下
在Nginx配置文件中xxx.example2.com域名的location /下配置以下内容
if ( $http_origin ~ http://(.*).example.com){
set $allow_url $http_origin;
}
#CORS(Cross Orign Resource-Sharing)跨域控制配置
#是否允许请求带有验证信息
add_header Access-Control-Allow-Credentials true;
#允许跨域访问的域名,可以是一个域的列表,也可以是通配符*
add_header Access-Control-Allow-Origin $allow_url;
#允许脚本访问的返回头
add_header Access-Control-Allow-Headers ‘x-requested-with,content-type,Cache-Control,Pragma,Date,x-timestamp’;
#允许使用的请求方法,以逗号隔开
add_header Access-Control-Allow-Methods ‘POST,GET,OPTIONS,PUT,DELETE’;
#允许自定义的头部,以逗号隔开,大小写不敏感
add_header Access-Control-Expose-Headers ‘WWW-Authenticate,Server-Authorization’;
#P3P支持跨域cookie操作
add_header P3P ‘policyref=”/w3c/p3p.xml”, CP=”NOI DSP PSAa OUR BUS IND ONL UNI COM NAV INT LOC”‘;
方法四
如需要允许用户请求来自xxx1.example.com或xxx1.example1.com访问xxx.example2.com域名时,返回头Access-Control-Allow-Origin,具体配置如下
在Nginx配置文件中xxx.example2.com域名的location /下配置以下内容
location / {
if ( $http_origin ~ .*.(example|example1).com ) {
add_header Access-Control-Allow-Origin $http_origin;
}
}
实例三:Nginx跨域配置并支持DELETE,PUT请求
默认Access-Control-Allow-Origin开启跨域请求只支持GET、HEAD、POST、OPTIONS请求,使用DELETE发起跨域请求时,浏览器出于安全考虑会先发起OPTIONS请求,服务器端接收到的请求方式就变成了OPTIONS,所以引起了服务器的405 Method Not Allowed。
解决方法
首先要对OPTIONS请求进行处理
if ($request_method = ‘OPTIONS’) {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
#其他头部信息配置,省略…
return 204;
}
当请求方式为OPTIONS时设置Allow的响应头,重新处理这次请求。这样发出请求时第一次是OPTIONS请求,第二次才是DELETE请求。
# 完整配置参考
# 将配置文件的放到对应的server {}里
add_header Access-Control-Allow-Origin *;
location / {
if ($request_method = ‘OPTIONS’) {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
return 204;
}
index index.php;
try_files $uri @rewriteapp;
}
实例四:更多配置示例
示例一
The following Nginx configuration enables CORS, with support for preflight requests.
#
# Wide-open CORS config for nginx
#
location / {
if ($request_method = ‘OPTIONS’) {
add_header ‘Access-Control-Allow-Origin’ ‘*’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, OPTIONS’;
#
# Custom headers and headers various browsers *should* be OK with but aren’t
#
add_header ‘Access-Control-Allow-Headers’ ‘DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type’;
#
# Tell client that this pre-flight info is valid for 20 days
#
add_header ‘Access-Control-Max-Age’ 1728000;
add_header ‘Content-Type’ ‘text/plain charset=UTF-8′;
add_header ‘Content-Length’ 0;
return 204;
}
if ($request_method = ‘POST’) {
add_header ‘Access-Control-Allow-Origin’ ‘*’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, OPTIONS’;
add_header ‘Access-Control-Allow-Headers’ ‘DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type’;
}
if ($request_method = ‘GET’) {
add_header ‘Access-Control-Allow-Origin’ ‘*’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, OPTIONS’;
add_header ‘Access-Control-Allow-Headers’ ‘DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type’;
}
}
示例二
if ($request_method = ‘OPTIONS’) {
add_header ‘Access-Control-Allow-Origin’ ‘https://docs.domain.com’;
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, PUT, DELETE, PATCH, OPTIONS’;
add_header ‘Access-Control-Allow-Headers’ ‘DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token’;
return 204;
}
if ($request_method = ‘POST’) {
add_header ‘Access-Control-Allow-Origin’ ‘https://docs.domain.com’;
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, PUT, DELETE, PATCH, OPTIONS’;
add_header ‘Access-Control-Allow-Headers’ ‘DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token’;
}
if ($request_method = ‘GET’) {
add_header ‘Access-Control-Allow-Origin’ ‘https://docs.domain.com’;
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
add_header ‘Access-Control-Allow-Methods’ ‘GET, POST, PUT, DELETE, PATCH, OPTIONS’;
add_header ‘Access-Control-Allow-Headers’ ‘DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token’;
}
其它技巧
Apache中启用CORS
在httpd配置或.htaccess文件中添加如下语句
SetEnvIf Origin “^(.*\.example\.com)$” ORIGIN_SUB_DOMAIN=$1
Header set Access-Control-Allow-Origin “%{ORIGIN_SUB_DOMAIN}e” env=ORIGIN_SUB_DOMAIN
PHP中启用CORS
通过在服务端设置Access-Control-Allow-Origin响应头
允许所有来源访问
header("Access-Control-Allow-Origin: *");
?>
允许来自特定源的访问
header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
?>
配置多个访问源
由于浏览器实现只支持了单个origin、*、null,如果要配置多个访问源,可以在代码中处理如下
$allowed_origins = array(
"http://www.example.com" ,
"http://app.example.com" ,
"http://cms.example.com" ,
);
if (in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)){
@header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
}
?>
HTML中启用CORS
CentOS6.x升级到7
1、查看当前CentOS版本
cat /etc/redhat-release
2、更新源
vim /etc/yum.repos.d/upgrade.repo 并输入以下内容:
[upgrade]
name=upgrade
baseurl=https://buildlogs.centos.org/centos/6/upg/x86_64/
enable=1
gpgcheck=0
3、卸载6.x自带的较新的助手,并安装老版[否则会报错]
yum erase openscap -y
yum install http://dev.centos.org/centos/6/upg/x86_64/Packages/openscap-1.0.8-1.0.1.el6.centos.x86_64.rpm -y
4、安装助手
yum install redhat-upgrade-tool preupgrade-assistant-contents -y
5、检测版本升级的风险,如果控制台输出了错误信息,则需要查询下解决方案并解决
preupg -s CentOS6_7
6、导入CentOS7的key
rpm –import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7
7、开始升级
centos-upgrade-tool-cli –network 7 –instrepo=http://vault.centos.org/centos/7.2.1511/os/x86_64/
8、国内服务器需经过漫长的等待
8、更新完后,重启服务器
reboot
升级完成后遇到的问题:
1、ssh、yum不可用问题:
vi /root/start.sh #输入以下内容:
#!/bin/bash
ln -s /usr/lib64/libsasl2.so.3.0.0 /usr/lib64/libsasl2.so.2
ln -s /usr/lib64/libpcre.so.1.2.0 /usr/lib64/libpcre.so.0
service sshd restart
rm -rf /etc/rc.d/rc.local?
mv /etc/rc.d/rc.local.bak /etc/rc.d/rc.local #恢复原始文件
rm -rf /root/start.sh #删除自身
#执行以下命令
chmod +x start.sh
chmod +x /etc/rc.d/rc.local
cp /etc/rc.d/rc.local /etc/rc.d/rc.local.bak #创建备份
echo ‘bash /root/start.sh’ >>/etc/rc.d/rc.local #添加脚本为开机自启动
#重启,后看下ssh是否可以正常连接
reboot
2、 ps工具不可用问题:
yum upgrade -y
yum downgrade grep
yum upgrade python
yum update
CentOS 7 下搭建高可用集群(转)
一、安装集群软件
必须软件pcs,pacemaker,corosync,fence-agents-all,如果需要配置相关服务,也要安装对应的软件。
二、配置防火墙
1、禁止防火墙和selinux
# systemctl disable firewalld
# systemctl stop firewalld
2、设置防火墙规则
# firewall-cmd –permanent –add-service=high-availability
# firewall-cmd –add-service=high-availability
三、各节点之间主机名互相解析
分别修改2台主机名分别为node1和node2,在CentOS 7中直接修改/etc/hostname加入本机主机名和主机表,然后重启网络服务即可。
#vi /etc/hostname
node1
#systemctl restart network.service
#hostname
node1
配置2台主机的主机表,在/etc/hosts中加入
192.168.122.168 node1
192.168.122.169 node2
四、各节点之间时间同步
在node1和node2分别进行时间同步,可以使用ntp实现。
[root@node1 ~]# ntpdate 172.16.0.1 //172.16.0.1 为时间服务器
五、各节点之间配置ssh的无密码密钥访问
下面的操作需要在各个节点上操作。
# ssh-keygen -t rsa -P ‘’ #这个生成一个密码为空的公钥和一个密钥,把公钥复制到对方节点上即可
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2 #对方主机名用登录用户名
两台主机都要互相可以通信,所以两台主机都得互相生成密钥和复制公钥,相互的节点上的hosts文件是都要解析对方的主机名, 192.168.122.168 node1 192.168.122.169 node2
# ssh node2 ‘date’;date #测试一下是否已经互信
六、通过pacemaker来管理高可用集群
1、创建集群用户
为了有利于各节点之间通信和配置集群,在每个节点上创建一个hacluster的用户,各个节点上的密码必须是同一个。
# passwd hacluster
Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
2、设置pcsd开机自启动
# systemctl start pcsd.service
# systemctl enable pcsd.service
3、集群各节点之间进行认证
# pcs cluster auth node1 node2Username: hacluster Password: node1: Authorized node2: Authorized
4、创建并启动集群
[root@z1 ~]# pcs cluster setup –start –name my_cluster node1 node2
node1: Succeeded
node1: Starting Cluster…
node2: Succeeded
node2: Starting Cluster…
5、设置集群自启动
# pcs cluster enable –all
6、查看集群状态信息
[root@z1 ~]# pcs cluster status
7、设置fence设备
这个可以参考
corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默 认配置目前尚不可用,这可以通过如下命令验证:
#crm_verify -L -V
可以通过如下面命令禁用stonith:
#pcs property set stonith-enabled=false(默认是true)
8、配置存储
高可用集群既可以使用本地磁盘来构建纯软件的镜像型集群系统,也可以使用专门的共享磁盘装置来构建大规模的共享磁盘型集群系统,充分满足客户的不同需求。
共享磁盘主要有iscsi或DBRD。本文并没有使用共享磁盘
9、配置浮点ip
不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择192.168.122.101作为浮动IP,给它取一个好记的名字 ClusterIP 并且告诉集群 每30秒检查它一次。
# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=192.168.122.170 cidr_netmask=24 op monitor interval=30s
# pcs update VIP op monitor interval=15s
10、配置apache服务
在node1和node2上安装httpd ,确认httpd开机被禁用。
# systemctl status httpd.service;
配置httpd监控页面(貌似不配置也可以通过systemd监控),分别在node1和node2上执行。
# cat > /etc/httpd/conf.d/status.conf << EOF
SetHandler server-status
Order deny,allow
Deny from all
Allow from localhost
EOF
首先我们为Apache创建一个主页。在centos上面默认的Apache docroot是/var/www/html,所以我们在这个目录下面建立一个主页。
node1节点修改如下:
[root@node1 ~]# cat
Hello node1
END
node2节点修改如下:
[root@node2 ~]# cat
Hello node2
END
下面语句是将httpd作为资源添加到集群中:
#pcs resource create WEB apache configfile=”/etc/httpd/conf/httpd.conf” statusurl=”http://127.0.0.1/server-status”
11、创建group
将VIP和WEB resource捆绑到这个group中,使之作为一个整体在集群中切换(此配置为可选)。
# pcs resource group add MyGroup VIP
# pcs resource group add MyGroup WEB
12、配置服务启动顺序
以避免出现资源冲突,语法:(pcs resource group add的时候也可以根据加的顺序依次启动,此配置为可选)。
# pcs constraint order [action] then [action]
# pcs constraint order start VIP then start WEB
13、指定优先的 Location (此配置为可选)
Pacemaker 并不要求你机器的硬件配置是相同的,可能某些机器比另外的机器配置要好。这种状况下我们会希望设置:当某个节点可用时,资源就要跑在上面之类的规则。为了达到这个效果我们创建location约束。同样的,我们给他取一个描述性的名字(prefer-node1),指明我们想在上面跑WEB 这个服务,多想在上面跑(我们现在指定分值为50,但是在双节点的集群状态下,任何大于0的值都可以达到想要的效果),以及目标节点的名字:
# pcs constraint location WEB prefers node1=50
# pcs constraint location WEB prefers node2=45
这里指定分值越大,代表越想在对应的节点上运行。
14、资源粘性(此配置为可选)
一些环境中会要求尽量避免资源在节点之间迁移,迁移资源通常意味着一段时间内无法提供服务,某些复杂的服务,比如Oracle数据库,这个时间可能会很长。为了达到这个效果,Pacemaker 有一个叫做“资源粘性值”的概念,它能够控制一个服务(资源)有多想呆在它正在运行的节点上。
Pacemaker为了达到最优分布各个资源的目的,默认设置这个值为0。我们可以为每个资源定义不同的粘性值,但一般来说,更改默认粘性值就够了。资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示负无穷,inf表示正无穷。
# pcs resource defaults resource-stickiness=100
常用命令汇总:
查看集群状态:#pcs status
查看集群当前配置:#pcs config
开机后集群自启动:#pcs cluster enable –all
启动集群:#pcs cluster start –all
查看集群资源状态:#pcs resource show
验证集群配置情况:#crm_verify -L -V
测试资源配置:#pcs resource debug-start resource
设置节点为备用状态:#pcs cluster standby node1
Centos7 firewalld·动态防火墙使用方法示例
# systemctl start firewalld # 启动,
# systemctl enable firewalld # 开机启动
# systemctl stop firewalld # 关闭
# systemctl disable firewalld # 取消开机启动
具体的规则管理,可以使用firewall-cmd ,具体的使用方法可以
$ firewall-cmd –help
–zone=NAME # 指定 zone
–permanent # 永久修改,–reload 后生效
–timeout=seconds # 持续效果,到期后自动移除,用于调试,不能与 –permanent 同时使用
1. 查看规则
查看运行状态
$ firewall-cmd –state
查看已被激活的 Zone 信息
$ firewall-cmd –get-active-zones
public
interfaces: eth0 eth1
查看指定接口的 Zone 信息
$ firewall-cmd –get-zone-of-interface=eth0
public
查看指定级别的接口
$ firewall-cmd –zone=public –list-interfaces
eth0
查看指定级别的所有信息,譬如 public
$ firewall-cmd –zone=public –list-all
public (default, active)
interfaces: eth0
sources:
services: dhcpv6-client http ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
查看所有级别被允许的信息
$ firewall-cmd –get-service
查看重启后所有 Zones 级别中被允许的服务,即永久放行的服务
$ firewall-cmd –get-service –permanent
2. 管理规则
# firewall-cmd –panic-on # 丢弃
# firewall-cmd –panic-off # 取消丢弃
# firewall-cmd –query-panic # 查看丢弃状态
# firewall-cmd –reload # 更新规则,不重启服务
# firewall-cmd –complete-reload # 更新规则,重启服务
添加某接口至某信任等级,譬如添加 eth0 至 public,永久修改
# firewall-cmd –zone=public –add-interface=eth0 –permanent
设置 public 为默认的信任级别
# firewall-cmd –set-default-zone=public
a. 管理端口
列出 dmz 级别的被允许的进入端口
# firewall-cmd –zone=dmz –list-ports
允许 tcp 端口 8080 至 dmz 级别
# firewall-cmd –zone=dmz –add-port=8080/tcp
允许某范围的 udp 端口至 public 级别,并永久生效
# firewall-cmd –zone=public –add-port=5060-5059/udp –permanent
b. 网卡接口
列出 public zone 所有网卡
# firewall-cmd –zone=public –list-interfaces
将 eth0 添加至 public zone,永久
# firewall-cmd –zone=public –permanent –add-interface=eth0
eth0 存在与 public zone,将该网卡添加至 work zone,并将之从 public zone 中删除
# firewall-cmd –zone=work –permanent –change-interface=eth0
删除 public zone 中的 eth0,永久
# firewall-cmd –zone=public –permanent –remove-interface=eth0
c. 管理服务
添加 smtp 服务至 work zone
# firewall-cmd –zone=work –add-service=smtp
移除 work zone 中的 smtp 服务
# firewall-cmd –zone=work –remove-service=smtp
d. 配置 external zone 中的 ip 地址伪装
查看
# firewall-cmd –zone=external –query-masquerade
打开伪装
# firewall-cmd –zone=external –add-masquerade
关闭伪装
# firewall-cmd –zone=external –remove-masquerade
e. 配置 public zone 的端口转发
要打开端口转发,则需要先
# firewall-cmd –zone=public –add-masquerade
然后转发 tcp 22 端口至 3753
# firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toport=3753
转发 22 端口数据至另一个 ip 的相同端口上
# firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toaddr=192.168.1.100
转发 22 端口数据至另一 ip 的 2055 端口上
# firewall-cmd –zone=public –add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.100
f. 配置 public zone 的 icmp
查看所有支持的 icmp 类型
# firewall-cmd –get-icmptypes
destination-unreachable echo-reply echo-request parameter-problem redirect router-advertisement router-solicitation source-quench time-exceeded
列出
# firewall-cmd –zone=public –list-icmp-blocks
添加 echo-request 屏蔽
# firewall-cmd –zone=public –add-icmp-block=echo-request [--timeout=seconds]
移除 echo-reply 屏蔽
# firewall-cmd –zone=public –remove-icmp-block=echo-reply
g. IP 封禁
# firewall-cmd –permanent –add-rich-rule=”rule family=’ipv4′ source address=’222.222.222.222′ reject”
rm删除文件恢复
误删除linux系统文件了?不用急,本文将给你一个恢复linux文件的方法,让你轻松应对运维中的各种风险问题。方法总比问题多~
说在前面的话
针对日常维护操作,难免会出现文件误删除的操作。大家熟知linux文件系统不同win有回收站,删除后的文件可以到垃圾箱寻回,要知道linux文件修复比较费劲,网络上面的文档也是五花八门。所以本次研究一种比较靠谱的文件和目录恢复方法,也给维护人员留一条后路。
分析对比debugfs. testdisk 6.14. extundelete,对比各自官网介绍和操作说明本次决定研究extundelete对文件和目录的恢复操作。
extundelete下载官网地址:https://pkgs.org/download/extundelete
Linux下文件误删除,使用extundelete恢复测试过程
1. 给虚拟主机添加一块磁盘,磁盘为/dev/sdb,如下:
2. 格式化磁盘,并进行挂载
3. # mkfs.ext4 /dev/sdb
4. # mkdir /usr/local/dbdata/
# mount /dev/sdb /usr/local/dbdata/
5. 测试误操作删除以下文件
6. /usr/local/dbdata/gperftools-2.4.tar.gz #文件
7.
/usr/local/dbdata/pcre-8.32 #目录
执行误操作:
# rm -rf /usr/local/dbdata/gperftools-2.4.tar.gz /usr/local/dbdata/pcre-8.32
8. 将误操作所在分区进行只读保护
如果确定文件被误删,在没有备份的情况下请马上对分区实施写入保护(预防新的写入覆盖误删的块数据,因此权限给只读):
# mount -o remount,ro /dev/sdb
# mount -o remount,ro /usr/local/dbdata/
9. 数据恢复工具安装
工具安装部署
官方网站是http://extundelete.sourceforge.net/ ,其目前的稳定版本是extundelete-0.2.4.
工具下载
# wget https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
解压安装
依赖包
# yum -y install gcc-c++ e2fsprogs.x86_64 e2fsprogs-devel.x86_64
# tar -jxvf extundelete-0.2.4.tar.bz2
# cd extundelete-0.2.4
# ./configure
# make && make install
验证安装结果
# extundelete -v
10. 文件恢复过程
恢复指定文件:
原理:从根节点(inode=2)开始找到被删除文件的i节点,然后recover i节点。
以下是模拟删除gperftools-2.4.tar.gz(文件)和pcre-8.32 (目录)
先检测被删除的文件有哪些:
# extundelete /dev/sdb –inode 2
从圈出来的可以看到,有以下两个
gperftools-2.4.tar.gz 15 Deleted
pcre-8.32 655361 Deleted
注意:恢复过程不要在误删分区进行,谨防inode. block块相互覆盖
先恢复文件(可根据文件名进行恢复):
# extundelete /dev/sdb –restore-file gperftools-2.4.tar.gz
恢复目录(根据目录名恢复):
# extundelete /dev/sdb –restore-directory pcre-8.32
最后会在当前目录下看到一个名为RECOVERED_FILES的目录,在目录里就可以看到被误删除的文件以及目录:
说在后面的话
根据上面操作证明extundelete 工具可以实现对误删数据的恢复,而且操作简单。
总结:
1. 使用rm一定要谨慎
2. 磁盘按照功能进行分区是必要的
3. 最少掌握一种数据恢复方式
centos 下查看本机公网IP
记一次驱动级浏览器主页被修改的解决过程
这段时间也不知道怎么的,打开IE自动跳到hao123.1668pg.com,打开360浏览器跳到hao360.1668pg.com,打开google跳到baidu.1668pg.com
用360主页锁定都没用。终于发现也有人和我一样的情况。要用更厉害些的一种办法删除这种东西。用360的系统急救箱扫了一遍。扫出来这么一个驱动服务“IQGoGVItrvtHoE.sys”的东西。
启动项目中也有类似在c:\windows\system32\drivers\这目录下的。一并清了
然后重启机器就解决问题了。
哎现在动不动这些恶意软件都绑这种驱动级的。太恶心了。
远程桌面无法复制粘贴传输文件解决办法(转)
远程服务器,复制粘贴文件到服务器的时候卡了一下,后来就无法复制粘贴了,今天查了一下资料终于找到原因了,特此给大家分享一下解决办法。
远程桌面无法复制粘贴传输文件解决办法
电脑、远程服务器
检查本机电脑
第一步:打开远程桌面连接。
点开电脑左下角的开始菜单,找到远程桌面连接,点开。如果你不常用远程桌面连接,那么这个图标就在附件里面,仔细找找就看到了。
远程桌面无法复制粘贴传输文件解决办法
第二步:点开远程桌面连接的对话框,在对话框的左下角找到“显示选项”点开它。
远程桌面无法复制粘贴传输文件解决办法
第三步:点开显示选项后,找到“本地资源”这一栏,点开它,找到粘贴板,勾选中。
远程桌面无法复制粘贴传输文件解决办法
检查服务器
第一步:打开远程的服务器,在服务器的任务栏随便一块空白处右击鼠标,选择“启动任务管理器”。
远程桌面无法复制粘贴传输文件解决办法
第二步:在打开的任务管理器中,我们找到“rdpclip.exe”这个进程,如果没有找到就算了。
远程桌面无法复制粘贴传输文件解决办法
第三步:找到这个进程后,选择”结束进程”,如果没有找到这个进程往下看。
远程桌面无法复制粘贴传输文件解决办法
第四步:第二步跟第三步结束掉的进程我们要恢复回来,我们在服务器的开始菜单找到运行的框,在运行框内输入”rdpclip“然后会显示这个进程出来,直接回车。
远程桌面无法复制粘贴传输文件解决办法
最后:做完服务器的这个操作后,然后再往服务器复制粘贴就成功了,小编已经解决了,你可以试试。
远程桌面无法复制粘贴传输文件解决办法
注意事项
服务器端没有找到rdpclip.exe这个进程的可以创建了结束再创建。
蜘蛛池是干什么的?对网站收录有好处吗?
在互联网上争取做好营销的,这款工具难免不得不懂。可以简单的来说蜘蛛池就是一种通过利用大型平台权重来获得百度收录以及排名的一种程序。蜘蛛池其中的一个功能就是可以帮助用户将大量的长尾关键字利用大型平台推送到百度进行收录与排名,通过百度蜘蛛池程序用户可以在短时间内将大量包含广告信息的页面推送到互联网中。并且这一切都是全自动化完成。
蜘蛛池其实就是一种特殊的外链,网站一般外链是我们自己做到某个网站的内页(发外链)或和谁交换的友情链接,虽然现在对百度权重等项目几乎没什么影响了,但链接的口多了就容易让百度等的蜘蛛顺着这些口爬进我们的网站,如果你的网站质量不错(编程规范、内容好、更新及时、数量足等等)百度就可能很喜欢,常来爬取你的网站。
蜘蛛池不一定是什么网站就能把你要做的关键词都能提升排名,最最关键的还是网站质量和用户体验,脱离了这个什么都是胡说。所谓蜘蛛池,指的是做大量泛站让搜索引擎收录,作为一个属于自己的外链资源。当有新的网站或新的页面时,把新URL放入到这些泛站资源页面上,可以马上获得蜘蛛的抓取和权重的一个传递。
说白了蜘蛛池起的就是一种辅助作用,想当于一个中间人,可以让你和姑娘(搜索引擎各种蜘蛛)多见几次,但能否XX还看你小子自己的本事。而它的原理就是有些服务器运营商把你的网站链接到整个服务器上的所有网站上去了,我们通常把这些服务器运营商手上的服务器称为他们自己养的蜘蛛,就这些服务器,据我所知有分权重蜘蛛和非权重蜘蛛的,还有分普通池和繁殖池的,好像算法上繁殖池好一些,因为这种好像可以让你的网站自己模拟蜘蛛爬行。
那么搜索引擎收录一个页面的机制是什么样的,有哪些考虑?
搜索引擎收录页面的规则可不是发现页面就可以收录,并不是解决了所谓的“孤岛”问题之后,页面就可以很快被收录了。所以,关键点并不是在于发现。
搜索引擎收录页面简单列列这些方面的因素至少有影响:
1.新站的时间短。我觉得这个影响是最大的。就是如果你是个新网站,你的内页收录上就是慢。即使你的内容已经开始在慢慢走向正规了,但是有些不同的类型的页面,收录依然是慢。这点,我觉得如果不是相当数量的高质量链接,是很难改变这个情况。
2.网站整体权重。如果是在新站周期内,你再加什么蜘蛛池也没用。可能反而有反面作用。网站整体权重会影响网站内页的收录速度。
3.搜索收录可能分页面类型。例如,我们互联网十八般武艺的常规文章页收录都比较及时。但是专题页的收录非常缓慢,我们做了几个专题,现在超过了1个月时间还没收录。所以,这里面搜索引擎可能已经细化了收录策略。对不同的页面类型采取不同的收录机制。
4.页面内容质量。页面内容的质量当然也会影响到页面的收录速度,这点也是肯定会有影响。
5.网站更新频率。我们在「优化抓取频率的重要性」这篇文章里面也说过。其实要提高搜索引擎蜘蛛的来访次数,唯一的方法还是要通过网站本身的内容更新。频繁更新有质量的内容,才能够提高蜘蛛的来访次数。如果本身内容更新不多,外部引流的蜘蛛过多,最终发现没什么内容索引,蜘蛛来访的次数也会下降。
我觉得从影响收录的影响来说,前面2点影响最大,也就是网站权重的影响。如果权重不高,又是新站的话,内容的收录肯定是不会那么顺利。
蜘蛛池本质上是希望解决一个什么问题呢,核心就是引蜘蛛的问题。引蜘蛛的目的是在于让蜘蛛发现网站里面这些新页面或者是还没被收录的页面。
Centos7系统安装配置GitLab服务器
1、首先
sudo yum update
更新当前库
2、执行以下命令
sudo yum install curl policycoreutils openssh-server openssh-clients -y
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
sudo firewall-cmd –permanent –add-service=http
sudo systemctl reload firewalld
其中 sudo yum install postfix 可能会报错,部分环境可能已经配置好此步,报错直接跳过。
3、添加gitlb官方地址至源文件
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
提示如下:
The repository is setup! You can now install packages.
即可以开始安装
执行安装:
sudo yum install gitlab-ce -y
提示如下:
Installed:
gitlab-ce.x86_64 0:9.4.2-ce.0.el7
Complete!
即安装成功
4、执行配置脚本
sudo gitlab-ctl reconfigure
此步骤大概会执行3分钟左右,结果大概如下:
unning handlers:
Running handlers complete
Chef Client finished, 362/517 resources updated in 03 minutes 40 seconds
gitlab Reconfigured!
即可通过访问服务器地址访问,并进行初始化配置(默认为80端口,配置文件为:/etc/gitlab/gitlab.rb)