在Ubuntu 16.04 VPS上為Google.com設置Nginx反向代理
本教程介紹了為Google搜索引擎配置Nginx反向代理的步驟。
在像中國這樣的世界上某些國家和地區,Google搜索引擎被阻止。 在這個信息時代,搜索引擎是知識的在線門戶,而Google是提供高質量搜索結果的排名第一的搜索引擎。 我們相信 自由獲取知識是一項基本而重要的人權。 知識是人類潛力,自由和機會的基礎,每個人都應免費獲得知識,不受任何限制或限制。
Nginx是流行的Web服務器以及反向代理。 反向代理是代表另一台服務器的代理。 如果您在另一個國家/地區擁有可以免費訪問Google.com的VPS或雲服務器,則可以在VPS或雲服務器上為Google.com設置Nginx反向代理。 當您在瀏覽器地址欄中輸入自己的域名時,反向代理將為您獲取Google.com和Google搜索結果。 VPS和雲服務器現在很便宜。
要設置反向代理,我們需要一個名為的Nginx模塊 ngx_http_google_filter_module
旨在幫助代理Google.com。 該模塊依賴於另一個名為 ngx_http_substitutions_filter_module
。 它們都是開源的第三方模塊,我們將不得不使用這兩個模塊手動編譯Nginx。 完成後,剩下要做的就是在Nginx服務器塊配置文件中添加一些簡單的指令並重新加載。
本教程將向您展示如何在Ubuntu 16.04 VPS上進行設置。 因此,讓我們開始吧。
1.備份Nginx配置文件
編譯並安裝Nginx之後,原始Nginx配置文件將被覆蓋。 您可以使用以下命令將主配置文件和服務器阻止文件備份到您的主目錄。 代字號代表您的主目錄。
cp /etc/nginx/nginx.conf /etc/nginx/sites-available/*.conf /etc/nginx/conf.d/*.conf ~
2.添加官方Nginx存儲庫
本教程將在撰寫本文時演示如何編譯最新的Nginx主線版本1.11.2。 Ubuntu 16.04存儲庫具有Nginx 1.10。 我們添加了官方的Nginx存儲庫,如下所示。
首先獲取Nginx GPG密鑰,並將其導入到Ubuntu 16.04系統。
wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
然後為Nginx創建一個源列表文件。
sudo nano /etc/apt/sources.list.d/nginx.list
將以下兩行添加到文件中。 的 deb-src
行允許我們使用以下命令下載Nginx源程序包: apt source
命令。
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx
按Ctrl + O保存文件。 按Ctrl + X關閉文件。 然後更新本地包索引。
sudo apt update
現在,Nginx官方存儲庫已添加到Ubuntu 16.04。
3下載Nginx源碼包
我們將做一個 nginx
目錄位於主目錄下以存儲Nginx源,然後cd進入該目錄。
mkdir ~/nginx && cd ~/nginx
使用以下命令下載Nginx源碼包:
sudo apt install dpkg-dev sudo apt source nginx
檢查下載的文件。
ls ~/nginx/
輸出:
nginx-1.11.2 nginx_1.11.2-1~xenial.dsc nginx_1.11.2-1~xenial.debian.tar.xz nginx_1.11.2.orig.tar.gz
4.下載兩個第三方模塊
安裝git工具。
sudo apt install git
克隆 ngx_http_google_filter_module
和 ngx_http_substitutions_filter_module
來自Github的存儲庫。
git clone https://github.com/cuber/ngx_http_google_filter_module.git git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module.git
5.編輯Nginx編譯規則
編輯Nginx編譯規則文件。
sudo nano ~/nginx/nginx-1.11.2/debian/rules
找 config.status.nginx: config.env.nginx
部分。 在CFLAGS中添加以下兩行。 更換 username
使用您的實際用戶名。 這兩行指定了 ngx_http_google_filter_module
和 ngx_http_substitutions_filter_module
模塊。
--add-module=/home/username/nginx/ngx_http_substitutions_filter_module --add-module=/home/username/nginx/ngx_http_google_filter_module
本教程將這兩個模塊下載到 /home/username/nginx
目錄。 如果您使用root帳戶,則替換 /home/username
與 /root
。 因為根用戶的主目錄是 /root
。
請注意,您需要在後面添加反斜杠 --with-ld-opt="$(LDFLAGS)"
如下面的屏幕截圖。 如果不這樣做, –添加模塊 編譯Nginx時,您添加的行將被忽略。
現在保存並關閉文件。
6.開始編譯!
確保您位於Nginx源目錄中。
cd ~/nginx/nginx-1.11.2/
安裝依賴項以構建我們的Nginx deb包。
sudo apt build-dep nginx
現在,使用以下命令來構建deb軟件包。
sudo dpkg-buildpackage -b
喝杯咖啡,等待幾分鐘。 在512M Digital Ocean Droplet上,此構建過程耗時約3分鐘。 完成後,其中將有7個deb文件 〜/ nginx / 目錄。 我們只需要安裝 nginx_1.11.2-1~xenial_amd64.deb
要麼 nginx_1.11.2-1~xenial_i386.deb
軟件包,具體取決於您的OS體系結構。 其他的是Nginx動態模塊包和調試包。 如果願意,也可以安裝它們。
如果您以前已經安裝過Nginx,那麼現在是時候刪除舊版本,然後再安裝新版本了。
sudo apt remove nginx nginx-common nginx-full cd ~/nginx sudo dpkg -i nginx_1.11.2-1~xenial_amd64.deb
要麼
sudo dpkg -i nginx_1.11.2-1~xenial_i386.deb
現在讓我們啟動Nginx。
sudo systemctl start nginx
如果您看到以下錯誤消息。
Failed to start nginx.service: Unit nginx.service is masked.
然後取消屏蔽nginx並再次發出啟動命令。
sudo systemctl unmask nginx
請注意,Nginx進程可能以用戶身份運行 nginx
要麼 www-data
。 可以通過在其中編輯第一行來更改 /etc/nginx/nginx.conf
文件。 只要確保Nginx與PHP-FPM以同一用戶身份運行即可。
現在檢查Nginx的配置參數。
sudo nginx -V
如果最後看到以下文本,則兩個模塊已成功添加到Nginx。
--add-module=/home/username/nginx/ngx_http_substitutions_filter_module --add-module=/home/username/nginx/ngx_http_google_filter_module
7.配置Nginx反向代理
在此步驟中,我們將首先從Let’s Encrypt獲取並安裝免費的TLS / SSL證書,以保護訪問者正在通過我們的反向代理進行搜索。 然後,我們配置反向代理。
這是非常重要的! 未加密的Google鏡像可能會被中國的防火牆封鎖!
在下面創建一個新的服務器塊配置文件 /etc/nginx/conf.d
。 更換 search.your-domain.com
與您的首選域名。
sudo nano /etc/nginx/conf.d/search.your-domain.com.conf
將以下文本粘貼到文件中。
server { listen 80; server_name search.your-domain.com; root /usr/share/nginx/html; location ~ /.well-known/acme-challenge { allow all; } }
保存並關閉文件。 測試Nginx配置並重新加載。
sudo nginx -t sudo systemctl reload nginx
現在,在您的DNS設置中,將域名指向Ubuntu 16.04 VPS的IP地址。 之後,從官方PPA安裝certbot客戶端。 python-certbot-nginx
是Certbot Nginx插件。
sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install certbot python-certbot-nginx
然後,我們可以使用此單行代碼獲取並安裝免費的TLS / SSL證書。 替換電子郵件地址和域名。
sudo certbot --authenticator webroot --installer nginx -w /usr/share/nginx/html/ --agree-tos --redirect --staple-ocsp -d search.your-domain.com --email your-email-address
現在,如果您輸入 search.your-domain.com
在您的Web瀏覽器中,您將被重定向到HTTPS。 如果您使用Amazon Web Services(AWS)或Google Cloud Platform(GCP),請確保防火牆設置中允許HTTPS通信。
讓我們將Nginx配置為充當Google.com的反向代理。
sudo nano /etc/nginx/conf.d/search.your-domain.com.conf
要為Google啟用反向代理,只需將以下指令複製並粘貼到服務器部分。
resolver 8.8.8.8; location / { google on; google_scholar on; }
保存並關閉文件。 測試Nginx配置。
sudo nginx -t
如果測試成功,請重新加載Nginx。
sudo systemctl reload nginx
現在,在瀏覽器地址欄中,輸入您的域名。 您應該會看到Google搜索! 嘗試搜索一些單詞。 這是我的Google反向代理: https://search.linuxbabe.com。 (此演示反向代理不再公開可用。)
優化
如果Nginx始終聯繫同一台Google服務器,則Google可以檢測到您正在使用某些程序進行搜索。 如果檢測到,將要求您輸入驗證碼以驗證您是人類。 為了防止被檢測到,我們可以在Nginx服務器塊配置文件中添加上游指令。
upstream www.google.com { server 172.217.0.228:443; server 172.217.3.4:443; server 172.217.4.196:443; server 172.217.4.132:443; server 216.58.219.228:443; server 216.58.192.4:443; server 216.58.194.196:443; server 216.58.218.100:443; server 216.58.219.36:443; server 216.58.194.68:443; server 216.58.221.132:443; server 216.58.221.228:443; server 216.58.203.4:443; server 216.58.197.100:443; server 216.58.199.100:443; } server { listen 80; ........ ........ } server { listen 443 ssl http2; ...... ...... }
這些是Google的一些IP地址。 您始終可以通過查找Google特定國家/地區域的A記錄來找到可用的IP地址,如下所示:
保存文件並重新加載Nginx。 從現在開始,Nginx將以循環方式從這些IP地址獲取Google搜索結果。
要以其他語言顯示Google,請使用 google_language
指示。
location / { google on; google_scholar on; google_language "en"; }
這將使用英語。 支持的語言如下。
ar -> Arabic
bg -> Bulgarian
ca -> Catalan
zh-CN -> Chinese (Simplified)
zh-TW -> Chinese (Traditional)
hr -> Croatian
cs -> Czech
da -> Danish
nl -> Dutch
en -> English
tl -> Filipino
fi -> Finnish
fr -> French
de -> German
el -> Greek
iw -> Hebrew
hi -> Hindi
hu -> Hungarian
id -> Indonesian
it -> Italian
ja -> Japanese
ko -> Korean
lv -> Latvian
lt -> Lithuanian
no -> Norwegian
fa -> Persian
pl -> Polish
pt-BR -> Portuguese (Brazil)
pt-PT -> Portuguese (Portugal)
ro -> Romanian
ru -> Russian
sr -> Serbian
sk -> Slovak
sl -> Slovenian
es -> Spanish
sv -> Swedish
th -> Thai
tr -> Turkish
uk -> Ukrainian
vi -> Vietnamese
為了防止Nginx在運行時被較新的版本替代 sudo apt upgrade
命令,可以阻止它升級。
sudo apt-mark hold nginx
總是歡迎提出意見,問題和建議。 如果您認為這篇文章有用,請訂閱我們的免費新聞通訊,或在Google +,Twitter或喜歡我們的Facebook頁面上關注我們。