Skip to content
This repository has been archived by the owner on Apr 5, 2022. It is now read-only.

Commit

Permalink
Реструктуризация, несовместимый конфиг
Browse files Browse the repository at this point in the history
  • Loading branch information
xtrafrancyz committed Aug 21, 2018
1 parent 7801b9d commit 7c97f4c
Show file tree
Hide file tree
Showing 10 changed files with 333 additions and 290 deletions.
20 changes: 7 additions & 13 deletions README.md
Expand Up @@ -6,38 +6,32 @@
Главное преимущество **vk-proxy** перед VPN - это то, что не нужно постоянно запускать VPN, тратить на него батарею и смотреть рекламу перед подключением. С этим прокси вы просто пользуетесь приложением ВК точно так же, как и до блокировок. В отличии от прокси, встроенного в офф. приложение, это работает.

## Установка прокси
Вы можете загрузить уже готовый [релиз](https://github.com/xtrafrancyz/vk-proxy/releases) или собрать прокси с исходников:
- `go get -u github.com/xtrafrancyz/vk-proxy`
- `cd $GOPATH/src/github.com/xtrafrancyz/vk-proxy`
- `go build`
Вы можете загрузить уже готовый [релиз](https://github.com/xtrafrancyz/vk-proxy/releases) или собрать прокси из исходников с помощью команды `go get -u github.com/xtrafrancyz/vk-proxy`. После, vk-proxy появится в папке `$GOPATH/bin`.

Затем необходимо настроить [nginx](http://nginx.org/) по примеру в `conf/nginx.conf`, и HTTPS, так как приложение без него работать не будет. Можно либо подключить [Cloudflare](https://www.cloudflare.com), либо сгенерировать сертификат через [Let's Encrypt](https://certbot.eff.org) и добавить его в nginx.

## Запуск прокси
Для удобства, вы можете записать все нужные параметры в конфигурационный файл:
```ini
host = 127.0.0.1
port = 80
bind = 127.0.0.1:80
```
... и затем запускать `./vk-proxy -config path/to/config.ini`

#### Параметры запуска
- `-host` -- ip адрес, на котором будет запущен прокси (по умолчанию на всех).
- `-port` -- порт прокси (по умолчанию 8881).
- `-unix` -- если указан, то вместо tcp, запускает на unix-сокете по указанному пути (например /var/run/vk-proxy.sock).
- `-bind` -- ip адрес и порт, на котором будет запущен прокси, можно указать только порт `:80`. Вместо ip адреса можно указать абсолютный путь к unix сокету, например `/var/run/vk-proxy.sock`.
- `-domain` -- по умолчанию домен берется из заголовка Host запроса, но если вам необходимо всегда использовать один домен или нет возможности передать заголовок Host, то можете указать домен для замены здесь.
- `-log-requests` -- писать в консоль информацию о всех запросах (по умолчанию выключено).
- `-log-verbosity` -- `0` писать только ошибки, `1` + статистику каждую минуту, `2` + все запросы, `3` + тело ответа на запрос.
- `-reduce-memory-usage` -- уменьшает использование памяти за счет процессора (по умолчанию выключено).
- `-remove-ads-from-feed` -- удаляет рекламные посты из ленты новостей (по умолчанию включено).
- `-gzip-upstream` -- использовать gzip для запросов к api.vk.com (по умолчанию включено)
- `-filter-feed` -- фильтровать ленту новостей от рекламы (по умолчанию включено).
- `-gzip-upstream` -- использовать gzip для запросов к api.vk.com (по умолчанию включено).

## Подключение к прокси
Чтобы подключиться к своему запущенному прокси, вам нужно будет заменить домен апи в приложении на свой, некоторые приложения и модификации позволяют это делать, а для некоторых нужна модификация приложения (будь то Android или iOS версия).

Для подключения к нашему публичному прокси `vk-api-proxy.xtrafrancyz.net`, вы можете скачать уже [готовые приложения со встроенным прокси](https://github.com/xtrafrancyz/vk-proxy/wiki/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D1%86%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F), либо вручную заменить домен апи в любом моде поддерживающем замену домена.

### Приложения с поддержкой замены домена
Инструкции по подключению и сами приложения (*ВКонтакте (официальное приложение)*, *Kate Mobile* или *VK Coffee*) вы можете найти здесь: https://xtrafrancyz.net/unblock-vk#modified_apps.
Инструкции по подключению и сами приложения (*SOVA V*, *ВКонтакте (официальное приложение)*, *Kate Mobile* или *VK Coffee*) вы можете найти здесь: https://xtrafrancyz.net/unblock-vk#modified_apps.

### Настройка старого официального приложения или его модов (версия 4.x)
1. Открываем приложение ВК, заходим в **Настройки** -> **Основные**.
Expand Down
52 changes: 13 additions & 39 deletions main.go
Expand Up @@ -2,60 +2,34 @@ package main

import (
"flag"
"fmt"
"log"
"os"
"strings"

"github.com/valyala/fasthttp"
"github.com/vharitonsky/iniflags"
)

var Config struct {
domain string
host string
unix string
port int
logRequests bool
reduceMemoryUsage bool
removeAdsFromFeed bool
debug bool
gzipUpstream bool
}

func main() {
if os.Getenv("VK_PROXY_DEBUG") == "1" {
Config.debug = true
}
config := ProxyConfig{}

flag.StringVar(&Config.unix, "unix", "", "unix domain socket to bind (example /var/run/vk-proxy.sock)")
flag.StringVar(&Config.host, "host", "0.0.0.0", "address to bind")
flag.IntVar(&Config.port, "port", 8881, "port to bind")
flag.StringVar(&Config.domain, "domain", "", "force use this domain for replaces")
flag.BoolVar(&Config.logRequests, "log-requests", false, "print every request to the log")
flag.BoolVar(&Config.reduceMemoryUsage, "reduce-memory-usage", false, "reduces memory usage at the cost of higher CPU usage")
flag.BoolVar(&Config.removeAdsFromFeed, "remove-ads-from-feed", true, "when enabled, ads from feed will be removed")
flag.BoolVar(&Config.gzipUpstream, "gzip-upstream", true, "use gzip for requests to api.vk.com")
bind := flag.String("bind", ":8881", "address to bind proxy (can be a unix domain socket: /var/run/vk-proxy.sock)")
flag.StringVar(&config.BaseDomain, "domain", "", "force use this domain for replaces")
flag.IntVar(&config.LogVerbosity, "log-verbosity", 1, "0 - only errors, 1 - stats every minute, 2 - all requests, 3 - requests with body")
flag.BoolVar(&config.ReduceMemoryUsage, "reduce-memory-usage", false, "reduces memory usage at the cost of higher CPU usage")
flag.BoolVar(&config.FilterFeed, "filter-feed", true, "when enabled, ads from feed will be removed")
flag.BoolVar(&config.GzipUpstream, "gzip-upstream", true, "use gzip for requests to api.vk.com")

iniflags.Parse()

StartTicker()

server := &fasthttp.Server{
Handler: reverseProxyHandler,
ReduceMemoryUsage: Config.reduceMemoryUsage,
Name: "vk-proxy",
}
p := NewProxy(config)

var err error
if Config.unix != "" {
log.Printf("Starting server on http://unix:%s", Config.unix)
err = server.ListenAndServeUNIX(Config.unix, 0777)
if strings.HasPrefix(*bind, "/") {
err = p.ListenUnix(*bind)
} else {
log.Printf("Starting server on http://%s:%d", Config.host, Config.port)
err = server.ListenAndServe(fmt.Sprintf("%s:%d", Config.host, Config.port))
err = p.ListenTCP(*bind)
}

if err != nil {
log.Fatalf("error in fasthttp server: %s", err)
log.Fatalf("Could not start server: %s", err)
}
}

0 comments on commit 7c97f4c

Please sign in to comment.