Ниже приведен возможный пример прокси исходящих HTTP-запросов из стандартного приложения App Engine в NodeJS во время выполнения через виртуальную машину Compute Engine с Squid, основанную на небольшом изменении доступной документации по Google Cloud Platform 1. 2 и Quickstarts 3 .
1. Создайте бессерверный VP C коннектор доступа : в основном следуйте 2 , чтобы создать соединитель. После обновления компонентов gcloud
и включения API доступа без сервера VP C в вашем проекте должно быть достаточно следующей команды:
gcloud compute networks vpc-access connectors create [CONNECTOR_NAME] \
--network [VPC_NETWORK] \
--region [REGION] \
--range [IP_RANGE]
2. Создайте виртуальную машину Compute Engine для использования в качестве прокси : в основном выполните 1 для настройки прокси-сервера Squid:
a. Зарезервируйте c внешний IP-адрес и назначьте его для Compute Engine VM .
b. Добавьте правило брандмауэра , чтобы разрешить traffi c для порта Squid по умолчанию: 3128. Эта команда должна работать, если вы используете VP по умолчанию C network : gcloud compute firewall-rules create [FIREWALL_RULE_NAME] --network default --allow tcp:3128
c. Установите Squid на ВМ с помощью следующей команды sudo apt-get install squid3
.
d. Включите записи acl localnet src
в файлах конфигурации Squid для коннектора доступа VP C:
sudo sed -i 's:#\(http_access allow localnet\):\1:' /etc/squid/squid.conf
sudo sed -i 's:#\(acl localnet src [IP_RANGE]/28.*\):\1:' /etc/squid/squid.conf
Например: если вы использовали 10.8.0.0 в качестве значения для поля [IP_RANGE] для создания коннектора , это должно выглядеть примерно так: sudo sed -i 's:#\(acl localnet src 10.8.0.0/28.*\):\1:' /etc/squid/squid.conf
e. Запустите сервер с sudo service squid start
3. Изменения в приложении App Engine : на основе Quickstart для Node.js измените следующие файлы, чтобы создать приложение, которое сканирует веб-страницу с использованием библиотеки запроса-обещания и отображает HTML веб-страницы. Запрос отправляется на веб-страницу с использованием соединителя доступа VP C и виртуальной машины в качестве прокси-сервера с изменениями файлов app.yaml и app. js.
a , пакет. json
...
"test": "mocha --exit test/*.test.js"
},
"dependencies": {
"express": "^4.16.3",
"request": "^2.88.0",
"request-promise": "^4.2.5"
},
"devDependencies": {
"mocha": "^7.0.0",
...
б. приложение. js
'use strict';
// [START gae_node_request_example]
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res
.status(200)
.send('Hello, world!')
.end();
});
//Add a handler to test the web crawler
app.get('/test', (req, res) => {
var request = require('request-promise');
request('http://www.input-your-awesome-website.com')
.then(function (htmlString) {
res.send(htmlString)
.end();
})
.catch(function (err) {
res.send("Crawling Failed...")
.end();
});
});
// Start the server
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
// [END gae_node_request_example]
c. app.yaml
runtime: nodejs10
vpc_access_connector:
name: "projects/[PROJECT]/locations/[REGION]/connectors/[CONNECTOR_NAME]"
env_variables:
HTTP_PROXY: "http://[Compute-Engine-IP-Address]:3128"
HTTPS_PROXY: "http://[Compute-Engine-IP-Address]:3128"
Каждый раз, когда вы go обращаетесь к обработчику /test
, который запрашивает go через прокси с помощью команды sudo tail -f /var/log/squid/access.log
от ВМ и проверяет изменения в журналах .
Примечания : для работы соединитель, приложение и виртуальная машина должны находиться в одном регионе, и это поддерживаемые области для соединителя .