匿名

爱自由、爱爬墙


  • 首页

  • 归档

  • 标签

Ubuntu 安装配置 GateOne

发表于 2016-09-06

平常要操作VPS,大多是用putty这样的SSH客户端连接,但某些情况,不能直接通过SSH连接,putty就无法使用了。
最近试用了一下GateOne,这是一个Web方式的SSH,安装设置好后,就可以通过Web页面来访问VPS了,试用下来,还是挺好用的。

GateOne是开源的,在GitHub上的地址:https://github.com/liftoff/GateOne
官方的介绍:http://liftoff.github.io/GateOne/

安装

GateOne是用Python基于tornado框架开发的,要安装GateOne,需要先安装python、pip、tornado。
python、pip的安装略过,tornado可以用如下命令安装:

1
# pip install tornado

找一个目录,从GitHub下载GateOne的代码并安装(需要root权限):

1
2
3
# git clone git://github.com/liftoff/GateOne
# cd GateOne/
# python setup.py install

启动

安装完成后,直接执行如下命令就能启动GateOne(如果有Nginx、Apache等web服务器占用了443端口,需要先停止):

1
# gateone

如果要以后台方式启动,可以用如下命令:

1
# service gateone start

执行后,在浏览器输入https://<VPS IP> 就能使用了。

配合Nginx的设置

虽然GateOne并不需要设置就能用,但其自带的SSL证书是无效的,访问时会提示网站不可信,同时,可能也不希望其独占443端口,这时可以配合Nginx来使用。

先修改GateOne的配置文件:/etc/gateone/conf.d/10server.conf
找到以下几项内容:

1
2
3
4
"address": "127.0.0.1",		
"disable_ssl": true,
"port": 54321,
"url_prefix": "/gateone/",

address改为”127.0.0.1”,这样外网不能直接访问GateOne,只能通过Nginx转发
disable_ssl设为True,表示不用GateOne自带的证书
port改为一个未占用的端口,要和Nginx设置一致
url_prefix改为”/gateone/“,要和Nginx设置一致

修改Nginx的设置文件,如/etc/nginx/sites-enabled/default,设置示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
listen 443 ssl;
server_name <domain>;

ssl on;
ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;

# GateOne
location /gateone/ {
proxy_pass http://127.0.0.1:54321;

proxy_redirect off;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $http_address;
proxy_set_header X-Scheme $scheme;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

其中的location和proxy_pass中的端口,要和GateOne中的设置一致。

设置好后,重启Nginx和GateOne,然后在浏览器输入https://<Domain>/gateone/ 就能使用了。

使用

GateOne用起来很方便,基本试试就会了,功能也比较强大,一个页面还可以最多开4个窗口,另外,还支持直接查看图片、pdf等文件,这点比putty还方便。

Ubuntu 安装 Let's Encrypt 获取免费证书

发表于 2016-07-07

以前给自己的网站申请免费证书,要去StartSSL这里申请,申请的步骤相对比较繁琐,证书到期前还要记得到网站去更新。

最近发现了一个开源的工具:Certbot(原来的名字叫Let’s Encrypt),安装以后申请证书相当的方便,证书到期前还能用定时任务自动更新,申请到的证书也能被各大主流浏览器接受。
Certbot的介绍:https://letsencrypt.org/
在GitHub上的开源项目地址:https://github.com/certbot/certbot

下面以Ubuntu 16.04为例,简要介绍如何安装和使用这个工具。

安装

在 Ubuntu 16.04 下,安装非常的容易,执行以下一条命令即可:

1
# apt-get install letsencrypt

获取证书

首先要有至少一个域名并指向安装工具的服务器,Certbot在获取证书时会使用80端口来验证域名,所以要先停止Apache、Nginx等web服务器,然后执行以下命令:

1
# letsencrypt certonly

然后会出现一个交互的窗口,总共3步:
首先输入一个email地址,用于接收紧急通知和恢复。
第二步选择同意他们的服务条款。
第三步输入要申请的域名,如果有多个域名可以一起申请,多个域名以逗号或空格分开,目前还不支持通配的域名证书。

顺利的话,会看到以下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to <email address>.
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/<domain>/fullchain.pem. Your cert will expire
on 2016-10-05. To obtain a new version of the certificate in the
future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If you like Let's Encrypt, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

这样就表示申请成功了,申请的域名保存在/etc/letsencrypt/live/<domain>目录下(<domain>是申请时输入的第一个域名),目录下有4个文件:

1
2
# ls /etc/letsencrypt/live/<domain>/
cert.pem chain.pem fullchain.pem privkey.pem

其中fullchain.pem为证书文件,privkey.pem为证书的私钥。

使用申请的证书

以Nginx为例,把证书配置到Nginx的配置文件即可,如以下:

1
2
3
4
5
6
7
8
9
10
11
server {
listen 443 ssl;
server_name <domain>;

# SSL证书的设置
ssl on;
ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;

...
}

配置后,重启Nginx,然后就可以通过https://<domain>来访问了。

更新证书

Certbot申请的证书,有效期只有90天,到期前需要更新证书,可以用如下命令来测试一下更新证书,更新前,也需要先暂停Nginx,更新成功后,再重启Nginx:

1
# letsencrypt renew --dry-run --agree-tos

其中--dry-run表示这是一个测试,并不真正更新,如果成功则表示可以更新证书,正式更新时把这个选项去掉即可。

看到如下信息就表示更新成功了:

1
2
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/<domain>/fullchain.pem (success)

自动更新证书

可以写一个脚本,将停止Nginx、更新证书、重启Nginx这三步写入脚本,由系统定时自动调用,实现证书的自动更新。

比如在/usr/bin/创建一个脚本cb-renew.sh,脚本内容可以参考如下:

1
2
3
4
#!/bin/sh
systemctl stop nginx
letsencrypt renew --agree-tos
systemctl start nginx

保存后,设置脚本为可执行:

1
# chmod +x /usr/bin/cb-renew.sh

在/etc/crontab文件最后增加一行,如下表示每2个月1号的2点30分,以root用户自动执行更新脚本:

1
30 2 1 */2 * root /usr/bin/cb-renew.sh

重启系统cron进程:

1
# systemctl restart cron

其他Linux和Webserver的安装使用方法

Certbot目前还是Beta版本,不同的Linux版本,安装使用方法不太一样,其他情况可以访问:https://certbot.eff.org/,选择自己的Webserver和操作系统来了解安装使用方法。

性价比较高的VPS(201606)

发表于 2016-07-03

原来用的VPS是在搬瓦工特价时申请的,只有128m内存,4G硬盘,虽然用来爬墙是足够了,但如果要折腾点别的,就觉得还是小了点,所以一直想着再申请个大一点的。正好最近也有两个朋友问我关于VPS的事,就去了解了一下。

搬瓦工 (BandwagonHost)

搬瓦工 是我申请第一个VPS的地方,当时特价的时候很便宜,我的128m内存的,一年只需要6刀,而且一直很稳定,没出过啥问题。不过现在特价的没有了,最便宜的要20刀一年,而且这个20刀的只有256m内存,要知道当年特价的时候,512m的也只要10刀。

虽然价钱贵了,不过搬瓦工仍然是值得推荐的,一是他的服务一直比较稳定,算是一个比较老牌可靠的VPS提供商,二是他们的管理面板上可以一键安装Shadowsocks,对于国内买VPS用来爬墙的算是个很贴心的服务。

目前两款比较低配的OpenVZ的VPS参数如下:

10G VPS 20G VPS
价格: $19.99/年 价格: $49.99/年
硬盘: 10 GB SSD 硬盘: 20 GB SSD
内存: 256 MB 内存: 512 MB
CPU: 1x Intel Xeon CPU: 2x Intel Xeon
带宽: 500 GB/月 带宽: 1 TB/月
购买链接 购买链接

点击购买链接后,默认是月付的,要年付,需要在 Billing Cycle 中改为 “$x9.99 USD Annually”。
搬瓦工现在有5个机房可选,美国的洛杉矶、费利蒙、凤凰城、佛罗里达和荷兰的阿姆斯特丹,购买后也可以在5个机房之间随意转移VPS,还支持支付宝付款。

HostUs

HostUs 据说也是一个开了挺多年的VPS提供商,低价的VPS内存和流量都挺大的,而且在亚洲的香港和新加坡也有机房。

在HostUs购买VPS需要注意一点:注册时的IP、填的地址和电话,都要一致,如果翻墙注册时填国内的地址电话,很容易被认为是欺诈而取消掉。

个人觉得以下几个OpenVZ架构的VPS性价比不错:

768MB 2 GB 亚太 256MB 亚太 512MB
价格: $15/年 价格: $35/年 价格: $25/年 价格: $35/年
内存: 768 MB 内存: 2 GB 内存: 256 MB 内存: 512 MB
vSwap: 768 MB vSwap: 2 GB vSwap: 256 MB vSwap: 512 MB
硬盘: 20 GB 硬盘: 75 GB 硬盘: 10 GB SSD 硬盘: 15 GB SSD
CPU: 1x CPU: 4x CPU: 1x CPU: 1x
带宽: 2 TB/月 带宽: 2 TB/月 带宽: 500 GB/月 带宽: 750 GB/月
机房:美国洛杉矶、亚特兰大、达拉斯、华盛顿和英国伦敦 机房:美国洛杉矶、亚特兰大、达拉斯、华盛顿和英国伦敦 机房:香港、新加坡 机房:香港、新加坡
购买链接 购买链接 购买链接 购买链接

上面的几个都是OpenVZ架构的,如果需要KVM架构的,可以考虑下面两个:

KVM-0.5 KVM-1
价格: $4.35/月 价格: $7.95/月
内存: 512 MB 内存: 1 GB
硬盘: 15 GB SSD 硬盘: 30 GB SSD
带宽: 750 GB/月 带宽: 1 TB/月
机房:美国洛杉矶、亚特兰大、华盛顿 机房:美国洛杉矶、亚特兰大、华盛顿
购买链接 购买链接

Hostodo

Hostodo 据说是一家2014年才开的VPS提供商,用的人似乎还不多,低价的VPS硬盘和流量比较大,似乎用来做个人网盘挺好的,不过因为开的时间还不够长,稳定性未知,如果做网盘建议做好备份。

个人觉得以下几个OpenVZ的VPS性价比不错:

VZ-256 VZ-512 VZ-1000
价格: $10/年 价格: $12/年 价格: $18/年
内存: 256 MB 内存: 512 MB 内存: 1 GB
vSwap: 256 MB vSwap: 512 MB vSwap: 1 GB
硬盘: 40 GB 硬盘: 55 GB 硬盘: 90 GB
带宽: 1 TB/月 带宽: 2 TB/月 带宽: 3 TB/月
优惠码: 无 优惠码: LETYRLYSPECIAL512M 优惠码: LowEnd1G
购买链接:
洛杉矶,迈阿密,达拉斯
购买链接:
洛杉矶,迈阿密,达拉斯
购买链接:
洛杉矶,迈阿密,达拉斯

注意VZ-512和VZ-1000都要优惠码,直接点链接默认是月付的,在 Billing Cycle 选择年付后默认的价格分别是$25/年和$45/年,要点击Continue后,找到“Have a promotion code? Click here to add it”,点击输入上面的优惠码才会变成$12/年和$18/年。

Hostodo还有个卖点,就是号称可以提供亚洲优化IP,见官方公告,如果有需求,可以发Ticket或邮件给他们申请。不过用网上看到的测试IP来测试Ping值,速度的提升有限,比原IP稍好一点,不能和香港、日本等亚洲机房比。

通过http(s)协议访问自建的Git远程仓库

发表于 2016-06-25

上一篇Git自建远程仓库,里面创建的远程库,是通过SSH协议来连接的,除了SSH协议,Git还支持通过http(s)协议或Git协议来访问远程库,配置也不太复杂。

Http协议

以Ubuntu为例,可以通过Nginx来配置http(s)访问Git远程库,系统需要先安装了Nginx,如果没有安装,可以用以下命令安装:

1
# apt-get install nginx

假设仓库放在/home/git目录下,在此目录下创建一个新的裸仓库,库名称为sample.git:

1
# git init --bare sample.git

修改新建的库的权限,让所有人均可修改,因为通过http访问时,默认用户是www-data,不改权限会不能push。

1
# chmod -R a+w sample.git

可以让Nginx来管理访问时的用户鉴权,用以下命令增加一个git用户并按提示设置密码,可以创建多个用户。

1
# htpasswd [-c] /etc/nginx/passwd git

如果提示没有htpasswd命令,需要先安装apache2-utils包:apt-get install apache2-utils。
/etc/nginx/passwd为用户名和密码文件,-c 参数表示创建一个新的密码文件,原来没有这个文件时必须要带,已经存在这个文件了就不要带-c参数了。

接着安装fcgiwrap包

1
# apt-get install fcgiwrap

修改Nginx的配置文件,增加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 配置以 /git 开始的虚拟目录
location ~ /git(/.*) {
# 使用 Basic 认证
auth_basic "Restricted";
# 认证的用户文件
auth_basic_user_file /etc/nginx/passwd;

# FastCGI 参数
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
# git 库在服务器上的根目录
fastcgi_param GIT_PROJECT_ROOT /home/git;
fastcgi_param PATH_INFO $1;
# 将认证用户信息传递给 fastcgi 程序
fastcgi_param REMOTE_USER $remote_user;
# 包涵默认的 fastcgi 参数;
include fastcgi_params;
# 将允许客户端 post 的最大值调整为 100 兆
client_max_body_size 100M;
}

重启nginx后,在其他机器就可以用http协议访问远程库了,如:

1
$ git clone http://<ip or domainname>/git/sample.git

系统会出现对话框,提示输入用户名和密码,输入上面用htpasswd命令创建的用户名和密码即可。

Git协议

顺便介绍下Git协议,这是git专用的一个协议,访问远程库的速度最快,但Git协议缺少用户的鉴权,所以一般只用于下载,默认情况下,通过Git协议不能push代码。
git安装后,已经支持通过Git协议,但需要在仓库的目录下增加一个空文件git-daemon-export-ok:

1
# touch /home/git/sample.git/git-daemon-export-ok

加了这个文件,表示这个仓库支持通过Git协议访问。

用如下命令启动Git协议的守护进程,默认会监听在9418端口。

1
# git daemon --reuseaddr --base-path=/home/git/ /home/git/

然后其他机器就能通过Git协议访问这个远程库了:

1
$ git clone git://<ip or domainname>/sample.git

Git自建远程仓库

发表于 2016-06-14

用Git做代码控制时,除了放在GitHub这类公开的远程仓库,还可以很方便的自己建个远程仓库玩。

准备

找一台Linux机器,以Ubuntu为例,先添加一个git用户,供其他电脑访问远程库:

1
$ sudo adduser git

如果是个人使用或小范围团队使用,通过SSH来访问会比较简单,收集所有需要访问的用户的ssh pub key,写入 /home/git/.ssh/authorized_keys,一行一条。

为了安全,也可以限制 git 用户登录 shell,编辑 /etc/passwd,找到以下内容:

1
git:x:1001:1001:,,,:/home/git:/bin/bash

把 /bin/bash 修改为 /usr/bin/git-shell

1
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

git-shell一登录就会立即退出。

新建远程仓库

远程仓库通常只需要做版本控制,不需要在上面直接修改提交代码,因此可以创建一个裸仓库,裸仓库没有工作区。
找一个放仓库的目录,如 /home/git,在这个目录下执行以下命令:

1
$ sudo git init --bare sample.git

sample可以根据实际修改为自己想要的名称,git远程仓库往往以.git为后缀,上面的命令会建立一个空的仓库,目录名为sample.git。

把目录的所有者改为git

1
$ sudo chown -R git:git sample.git

至此远程仓库就建好了,在其他电脑,可以直接clone这个仓库:

1
$ git clone git@<remote server ip>:/home/git/sample

一个本地库关联多个远程库

公司正式项目的远程仓库需要做每日构建,对提交的代码有一定的要求,必须要功能完备没有编译错误才能提交,同时还限制了在远程仓库上创建分支。如果有个功能需要多人来协作开发,就可以用多个远程库的方式,在功能还未开发完时在团队内同步代码。
自建的远程库可以克隆自项目原来的库,如执行以下命令:

1
$ git clone --bare -b <branch> --depth 1 <project url> [<local dir>]

和上面新建一样,--bare表示这是一个没有工作区的裸仓库。
如果项目库有多个分支,-b <branch> 表示只克隆某个分支,不需要将全库克隆下来。
--depth 1 表示是浅克隆,只克隆最新的变更记录,其他不克隆。
<project url> 是项目远程仓库的地址,<local dir> 为本地目录,可选。

克隆后,同样把所有者改为git用户

1
$ sudo chown -R git:git <local dir>

团队成员,在自己机器的本地库上,添加新的远程库:

1
$ git remote add origin2 git@<team server ip>:/home/git/sample

远程库的名称默认是origin,为了和原有的远程库区分开,这里把新增的远程库命名为origin2

添加后,这个本地库就关联了2个远程库,代码可以先提交到团队自己的远程库,其他人就能通过拉取这个远程仓库及时获取他人的开发内容,待功能全部完成后再一次性提交到项目正式的远程库。
从新建的远程库拉取和提交修改:

1
2
$ git pull origin2 master
$ git push origin2 master

利用Nginx反向代理谷歌

发表于 2016-06-09

自从谷歌被墙,虽然在家可以翻墙访问,但在公司翻墙不方便,只能在网上找谷歌镜像站(镜像站是通俗叫法,更准确的叫法是反向代理)。但这些找来的镜像站往往不太稳定,经常过一段时间就不能访问甚至也会被墙,所以想着要搭个个人自用的反向代理。

搭反向代理需要的条件

  • 一个墙外的VPS
    对VPS的要求不高,搬瓦工128m内存的小机,搭建及使用均毫无压力。

  • 一个域名
    网上有很多地方可以申请免费的域名,比如Freenom,可以免费申请.tk、.ml、.cf、.ga等后缀的顶级域名,最长一年免费,到期可以免费续期。

  • 域名的SSL证书
    其实反向代理本身是不需要SSL证书的,但如果没有证书只用http,仍然会被墙检测到搜索的内容,也就非常容易被拦截甚至被封IP,所以,反代谷歌最好有SSL证书,用https协议来访问。
    网上能免费申请SSL证书的地方不多,推荐StartSSL,也是最长一年免费,到期再免费续期。申请SSL证书的步骤比较麻烦,可以看看这个教程:新StartSSL免费SSL证书申请使用。

安装并编译Nginx

Nginx自身就支持反向代理功能,但为了更好的反代谷歌,还需要至少一个第三方模块,Nginx加入第三方模块相对有点麻烦,需要下载源码重新编译。
这次折腾编译Nginx,参考了些网上的教程,但没有完全按照教程,步骤稍有点多,主要想尽量保留原有发行版的功能,以备以后用Nginx做其他用途。

以下命令全是在Ubuntu上执行,CentOs的命令不一样,用户默认为root,非root用户很多命令需要加sudo。

先安装需要用到的一些包

1
2
3
4
5
6
# apt-get update
# apt-get install libpcre3 libpcre3-dev
# apt-get install zlib1g zlib1g-dev openssl libssl-dev
# apt-get install libxml2 libxml2-dev libxslt1-dev
# apt-get install libgd-dev libgeoip-dev
# apt-get install -y gcc g++ make automake

安装Nginx的发行版

1
# apt-get install nginx

查看发行版的版本号和编译参数

1
2
3
4
5
# nginx -V
nginx version: nginx/1.9.3 (Ubuntu)
built with OpenSSL 1.0.2d 9 Jul 2015
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module

从上面的信息可以看到当前安装的是1.9.3版本,configure arguments后面跟的一长串是发行版的编译参数,很重要,后面需要用到。

找一个目录放源码,在这个目录里下载对应版本的Nginx源码并解压:

1
2
# wget http://nginx.org/download/nginx-1.9.3.tar.gz
# tar -zxvf nginx-1.9.3.tar.gz

为了在反代时,更好的替换原网页中的信息,需要在编译时增加一个第三方模块:substitutions 扩展
下载 substitutions 的源码

1
# git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module

下载后,会在当前目录下有个 ngx_http_substitutions_filter_module 目录

另一个用于便捷配置反代Google的第三方模块:ngx_http_google_filter_module

1
git clone https://github.com/cuber/ngx_http_google_filter_module

下载后,会在当前目录下有个 ngx_http_google_filter_module 目录,这个模块可选,增加后在Nginx配置文件中可以很简单的反代google

进入Nginx源码的目录,设置编译参数,其实就是在原发行版的编译参数后,增加两个--add-module=../xxx,把两个第三方模块包括进来。

1
2
3
4
5
# cd nginx-1.9.3
# ./configure \
> --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_spdy_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module \
> --add-module=../ngx_http_substitutions_filter_module \
> --add-module=../ngx_http_google_filter_module

设置后,会开始检查这些编译参数和环境,如果上面少安装了某些包,或更新的版本需要其他的包,就会报错,如少安装了libgeoip-dev,会报如下错误:

1
./configure: error: the GeoIP module requires the GeoIP library.

如果报了这类错误,可以Google一下错误信息,找到缺失的包并安装,然后再次执行 ./configure ... 命令设置编译参数。

如果检查通过,最后会显示如下的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ md5: using OpenSSL library
+ sha1: using OpenSSL library
+ using system zlib library

nginx path prefix: "/usr/share/nginx"
nginx binary file: "/usr/share/nginx/sbin/nginx"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/lib/nginx/body"
nginx http proxy temporary files: "/var/lib/nginx/proxy"
nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
nginx http uwsgi temporary files: "/var/lib/nginx/uwsgi"
nginx http scgi temporary files: "/var/lib/nginx/scgi"

然后编译Nginx

1
2
# make 
# make install

将编译后的文件替换到发行版的安装目录

1
# cp -rf objs/nginx /usr/sbin/nginx

可以用如下命令来关闭/启动 Nginx

1
2
# systemctl stop nginx
# systemctl start nginx

用如下命令可以查看运行的状态

1
# systemctl status nginx

Nginx的设置

Nginx的配置文件是 /etc/nginx/nginx.conf,贴一下我反代Google的设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# upstream配置google的ip,ip可以通过 nslookup www.google.com 命令获取,
# 多运行几次nslookup会获取到多个IP,有助于避免触发google的防机器人检测。
upstream www.google.com {
server 172.217.0.4:443 weight=1;
server 172.217.1.36:443 weight=1;
server 216.58.193.196:443 weight=1;
server 216.58.216.4:443 weight=1;
server 216.58.216.36:443 weight=1;
server 216.58.219.36:443 weight=1;
server 74.125.25.99:443 weight=1;
server 74.125.25.103:443 weight=1;
server 74.125.25.104:443 weight=1;
server 74.125.25.105:443 weight=1;
server 74.125.25.106:443 weight=1;
server 74.125.25.147:443 weight=1;
}

# 这里将http的访问强制跳转到https,<domain.name>改为自己的域名。
server {
listen 80;
server_name <domain.name>;
# http to https
location / {
rewrite ^/(.*)$ https://<domain.name>$1 permanent;
}
}

# https的设置
server {
listen 443 ssl;
server_name <domain.name>;
resolver 8.8.8.8;

# SSL证书的设置,<path to ssl.xxx>改为自己的证书路径
ssl on;
ssl_certificate <path to ssl.crt>;
ssl_certificate_key <path to ssl.key>;

# 防止网络爬虫
#forbid spider
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
{
return 403;
}

# 禁止用其他域名或直接用IP访问,只允许指定的域名
#forbid illegal domain
if ( $host != "<domain.name>" ) {
return 403;
}

access_log off;
error_log on;
error_log /var/log/nginx/google-proxy-error.log;

# 编译时加了 ngx_http_google_filter_module 模块,location的设置就非常简单
location / {
google on;
}
}

如果编译时没有加 ngx_http_google_filter_module 模块,location的设置可以参考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
location / {
proxy_redirect off;
proxy_cookie_domain google.com <domain.name>;
proxy_pass https://www.google.com;
proxy_connect_timeout 60s;
proxy_read_timeout 5400s;
proxy_send_timeout 5400s;

proxy_set_header Host "www.google.com";
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Referer https://www.google.com;
proxy_set_header Accept-Encoding "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Accept-Language "zh-CN";
proxy_set_header Cookie "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=en-US:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";

subs_filter https://www.google.com.hk <domain.name>;
subs_filter https://www.google.com <domain.name>;
#subs_filter_types text/css text/xml text/javascript;

sub_filter_once off;
}

修改完配置文件后,可以用 nginx -t 检查配置文件是否正确:

1
2
3
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

看到上面的显示就表明设置正确。

配置文件修改后需要重启Nginx:

1
# systemctl restart nginx

二十七年了

发表于 2016-06-04

从来不需要想起,永远也不会忘记!纪念那年,那些勇敢的人!

tankman

Ubuntu设置使用代理

发表于 2016-06-02

为了方便测试一些命令和工具,在公司用VirtualBox安装了一个Ubuntu的Server版,Server版默认没有图像界面,跑起来对系统资源的占用比较少,很适合用于虚拟机,特别是在公司用了很多年的低配置电脑上。

在公司上网需要通过代理,这里简要介绍一下Ubuntu几个可能需要设置代理的地方。

设置apt.conf

Ubuntu在安装时就会提示输入代理的设置,设置的代理保存在 /etc/apt/apt.conf 文件里,文件内容格式如下:

1
Acquire::http::Proxy "http://<proxy.server>:<port>/";

如果安装时没设置代理,或代理有变化,以后也可以编辑修改这个文件。

这样设置后,apt-get就可以正常使用了。

设置环境变量

只设置apt.conf,wget或git等软件还是不能访问网络,这时可以再设置2个环境变量:

1
2
$ export http_proxy=http://<proxy.server>:<port>/
$ export https_proxy=http://<proxy.server>:<port>/

或者将这2条命令添加到 ~/.bashrc 结尾。
如果访问的代理需要用户名和密码,上面的代理设置可以写成 http://<user>:<password>@<proxy.server>:<port>/ 。
有了这两个环境变量,wget或git(通过http/https)等命令就可以正常访问网络了。

wget的设置

对于wget,还可以编辑/etc/wgetrc,找到如下内容,去掉设置项前的#号并修改其中的内容:

1
2
3
4
5
6
7
8
# You can set the default proxies for Wget to use for http, https, and ftp.
# They will override the value in the environment.
#https_proxy = http://proxy.yoyodyne.com:18023/
#http_proxy = http://proxy.yoyodyne.com:18023/
#ftp_proxy = http://proxy.yoyodyne.com:18023/

# If you do not want to use proxy at all, set this to off.
#use_proxy = on

或者在主目录下新建一个文件 ~/.wgetrc,将上面那段内容复制过来并按实际修改。

如果想临时使用一个代理,不想修改配置文件或设置环境变量,可以在wget命令中增加 -e "xxx" 选项,这个选项是执行一个wgetrc格式的命令。
命令格式如下:

1
$ wget -e "use_proxy=on" -e "http_proxy=http://<proxy.server>:<port>/" <url>

Git的设置

Git支持Git、SSH、HTTP/HTTPS三种协议访问远程仓库,3钟协议的远程仓库地址格式不同,以 GitHub 为例:
Git协议:git://github.com/...
SSH协议:git@github.com:...
HTTP/HTTPS协议:http://github.com/... 或 https://github.com/...

上面设置的环境变量,可以让Git使用HTTP/HTTPS协议通过代理访问远程仓库。

除了设环境变量,Git也可以通过如下命令设置http的代理:

1
$ git config --global http.proxy http://<user>:<password>@<proxy.server>:<port>

如果要通过Git协议访问远程仓库,可以先安装一个软件 connect-proxy (其他发行版可能叫 proxy-connect):

1
$ sudo apt-get install connect-proxy

然后在 /usr/bin 下新建一个文件 httpproxywrapper ,内容如下:

1
2
#!/bin/sh
connect -H <proxy.server>:<port> "$@"

上面的 -H 表示是Http代理,如果是socks代理,需要改为 -S。

给 httpproxywrapper 设置可执行权限

1
$ sudo chmod +x /usr/bin/httpproxywrapper

然后设置 git 使用代理:

1
$ git config --global core.gitproxy /usr/bin/httpproxywrapper

或设置环境变量:

1
$ export GIT_PROXY_COMMAND="/usr/bin/httpproxywrapper"

这样设置,就可以用Git协议通过代理访问远程仓库了。

至于Git的SSH协议,网上找了几种方法,但经测试均无法通过http代理访问远程仓库,猜测可能和公司的代理设置有关,就不折腾了。

Docker的设置

Docker要使用代理,需要修改 etc/default/docker 这个文件,在其中增加如下几行:

1
2
3
http_proxy=http://<proxy.server>:<port>
https_proxy=http://<proxy.server>:<port>
export http_proxy https_proxy

需要注意,原文档中有一行注释 #export http_proxy="http://127.0.0.1:3128/",但按照这样的格式直接写 export http_proxy=http://<proxy.server>:<port> 却不生效。

修改后,需要重启Docker才能使设置生效:

1
$ sudo systemctl restart docker

用以下命令查看设置是否成功:

1
$ sudo docker info

在返回信息中看到有以下两行就表明OK了:

1
2
Http Proxy: http://<proxy.server>:<port>
Https Proxy: http://<proxy.server>:<port>

如何查找Google的IP地址段

发表于 2016-06-01

一般查找域名对应的IP,可以用这个命令 nslookup <域名>,但这样找,返回的ip比较少,今天看到一条命令,可以批量查找Google当前的IP范围。

命令及返回的结果如下:

1
2
3
4
5
6
7
8
# nslookup -q=TXT _netblocks.google.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
_netblocks.google.com text = "v=spf1 ip4:64.18.0.0/20 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:207.126.144.0/20 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"

Authoritative answers can be found from:

这条命令是从谷歌的DNS服务器(8.8.8.8),获取很多的IP地址段。每个地址段格式如下:

1
216.239.32.0/19

这是一个CIDR(无类别域间路由,Classless Inter-Domain Routing),前面的216.239.32.0是起始地址,后面的/19表示掩码的位数,这里具体的掩码是255.255.224.0,在这个掩码范围内的都是Google的IP,总计8190个。掩码位数越小,表示IP地址段的范围越大。上面查到的这些地址段表示的IP,全部加起来大概有二十多万个。

要根据CIDR计算地址范围可以点这里。

另外,VPS上安装的精简版Ubuntu,默认并没有安装nslookup,可以执行以下命令安装:

1
# apt-get install dnsutils

Centos安装nslookup的命令如下:

1
# yum install bind-utils

Google常用搜索技巧

发表于 2016-05-30

Google是个人最常用的搜索引擎,没有之一,这里简单整理记录一下常用的一些Google搜索技巧,用好了,在搜索时能起到事半功倍的效果。

或操作

一般搜索时,如果输入多个词,默认是与的关系,如输入词1和词2,即搜索同时包含词1和词2的网页,如果想搜包含词1 或包含词2 或同时都包含的网页,可以使用大写的 OR(不能用小写)。

举例:电影《肖申克的救赎》在台湾的翻译是《刺激1995》,如搜索关于这个电影的相关内容,搜索条件可以输入 肖申克的救赎 OR 刺激1995,可以把相关的内容一次全搜索出来。

减号

在搜索时,如果想排除某些内容,可以使英文字符 - 号。

举例:如搜索佛教中关于天龙八部的信息,想要排除金庸那本著名的同名小说,搜索条件可以输入 天龙八部 佛教 -金庸。

星号或问号

有时记不清某个词或句子中的部分内容,或想模糊查询,可以在查询时使用通配符 * 或 ?。

举例:如搜索反向*理,可以匹配“反向代理”、“反向D理”、“反向代-理”等内容

双引号

正常搜索时,Google会试图找出含有全部搜索内容的网页,但对内容的次序并不关心,如果想要精确定位,可以将内容用双引号括起来。

举例:如搜索"postgresql教程",得到的结果会明显少于postgresql教程。

site

想让搜索限定在某个网站内,可以使用site:xxxxx

举例:如只想在v2ex里搜索FinalSpeed相关的内容,搜索条件可以输入 finalspeed site:v2ex.com
注意:site后的冒号是英文字符,且冒号后不能跟空格。网址中不需要有www、http、/等字符。

filetype

如果要找一些文档资料,想指定某个文档类型,可以用filetype:xxx,而且Google支持直接搜索PDF、DOC等文件。

举例:如搜索关于PostgreSQL的相关PDF资料,搜索条件可以输入 postgresql filetype:pdf

intitle 和 allintitle

有时只想要在网页的标题中搜索某些内容,可以用intitle 或 allintitle

举例:如在标题中搜索“postgresql 教程”,可以用以下用法:intitle:postgresql 教程,或allintitle:postgresql 教程,后一种写法等同于intitle:postgresql intitle:教程

intext 和 allintext

这两个是在正文中搜索,用法类似intitle 和 allintitle。

inurl 和 allinurl

这两条命令是在网页地址中搜索,用法类似intitle 和 allintitle。

最后说一句:珍爱生命,远离百度。

123
匿名

匿名

没有什么能够阻挡,你对自由的向往!

21 日志
21 标签
© 2016 匿名
由 Hexo 强力驱动
主题 - NexT.Muse