2016-08-12 6 views
1

Мой сервер Nginx выступает в качестве прокси-сервера для сервера Gitlab, проблема в том, что я пытаюсь «**git clone [email protected]:username/project.git**« Я не могу клонировать проект [это не туннелирование от Сервер Nginx на сервер Gitlab]Git clone через прокси Nginx для сервера Gitlab не работает

Когда я обновляю файл/etc/hosts моей локальной системы с IP-адресом сервера Gitlab, он отлично клонирует без пароля [я обновил свой профиль с помощью открытого ключа SSH на Gitlab].

Итак, я пришел к выводу, что я должен обновить свою конфигурацию Nginx с помощью правил, которые могут туннелировать SSH-связь с любой клиентской системы на сервер Gitlab через сервер Nginx.

Попробовал код на этом Link путем внесения изменений как следует:

upstream gitlab { 
server 192.168.61.102:22; 
} 

server { 
listen 22; 
server_name gitlab.example.com; 

location/{ 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header Host $http_host; 
proxy_redirect off; 

proxy_pass http://gitlab; 
} 
} 

, но он не работает. Было бы здорово, если бы кто-то помог мне в настройке правил, чтобы заставить его работать.

Примечание: В приведенном выше коде 192.168.61.102 является IP-адрес моего сервера gitlab, мой сервер Nginx находится в 192.168.61.101

ответ

1

Во-первых, вам нужно прекратить прослушивание Nginx на порту 22. Nginx не обрабатывает пересылку SSH, ваш брандмауэр делает.

Если вы используете iptables, эти правила будут перенаправлять все запросы через ваш хост Nginx на ваш хост Gitlab.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-destination [GITLAB-IP]:22 
sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 22 -j SNAT --to-source [NGINX-IP] 

Вы, возможно, потребуется изменить eth0 в этих командах, чтобы соответствовать вашей установки сервера.


Затем Вам необходимо включить пересылку пакетов путем редактирования файла /etc/sysctl.conf и раскомментировать эту строку:

net.ipv4.ip_forward=1 

Затем перезагрузить конфигурацию, которую вы только что изменил с этой командой:

sudo sysctl -p 

И, наконец, правило iptables не является постоянным по умолчанию и будет стерто при перезагрузке сервера. Самый простой способ сделать их постоянными - использовать пакет iptables-persistent. Установить этот пакет, как это:

sudo apt-get install iptables-persistent 

И после того, как он установлен, вы можете сохранить/восстановить правила Iptables в любое время с этими командами:

sudo invoke-rc.d iptables-persistent save 
sudo invoke-rc.d iptables-persistent reload 

Если вы на Ubuntu 16.04 или более поздняя версия, то эти команды

sudo netfilter-persistent save 
sudo netfilter-persistent reload 

Вы хотите запустить команду сохранения после получения правил работы и вы проверили их. Затем, когда ваш сервер перезагрузится, сохраненные вами правила будут загружены автоматически.

+0

Очень информативный с приятными подробностями, спасибо, что U даст ему попытку и результат после выполнения, но затем, какова цель/usecase кода Nginx (Источник: [link] (https://gist.github.com/fnando/ 1101211)) Я упомянул в вопросе, не помогает ли мне в моем сценарии? –

+0

Код Nginx используется для перенаправления HTTP-запросов на ваш хост Gitlab, но у вас есть возможность прослушивать порт 22, который является SSH-портом. Он должен прослушивать порт 80. – BrokenBinary

+0

Тогда код, упомянутый в этой ссылке, с заголовком «Конфигурация Nginx для туннеля SSH» дает неправильную идею? –

1

Nginx прокси для запросов HTTP.

При клонировании через SSH вы не используете http.

Что вам нужно сделать, это использовать что-то вроде перенаправления портов на вашем маршрутизаторе или iptables на вашем сервере.

+0

Но какова цель/usecase кода Nginx (источник: [link] (https://gist.github.com/fnando/1101211)) Я упомянул в вопросе, не помогает ли это в моем сценарий? –

+1

Цель этого кода - перенаправить HTTP-запросы, полученные на порт 80, на localhost на порт 3000. Но это всегда HTTP-трафик, который перенаправляется. Таким образом, с помощью вашего кода вы можете сделать свой веб-интерфейс gitlab доступным из внешнего мира и т. Д., Но вы не сможете преобразовать запросы ssh в http с прокси-сервером nginx. Ответ от BrokenBinary с помощью iptables - это путь. – Jawad

+0

Тогда код, упомянутый в этой [link] (https://gist.github.com/fnando/1101211) с заголовком «Конфигурация Nginx для SSH-туннеля» дает неправильную идею? –