2016-08-12 12 views
1

私のNginxサーバーはGitlabサーバーのプロキシとして機能していますが、 "**git clone [email protected]:username/project.git**"を試してみると問題が発生します[それはトンネリングしていませんGitlabサーバーへのNginxサーバー]Gitlabサーバー用のNginxプロキシ経由のGitクローンが機能していません

ローカルシステムの/ etc/hostsファイルをGitlabサーバーのIPアドレスで更新すると、パスワードなしで正常にクローンされます。[私のプロファイルをGitlabのSSH公開キーで更新しました]。

私は、Nginx Serverを通じてSSH通信を任意のクライアントシステムからGitlab ServerにトンネリングできるルールでNginx Configurationを更新しなければならないという結論に達しました。

は、以下のように変更を加えることによって、この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では私gitlabサーバのIPアドレスである、私の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ファイルを編集し、この行のコメントを外すことにより、パケット転送を有効にする必要があります。

sudo sysctl -p 

net.ipv4.ip_forward=1 

次に、あなただけのこのコマンドで変更された構成をリロード

最後に、これらのiptablesルールはデフォルトでは永続的ではなく、消去されますサーバーを再起動したときに表示されます。それらを永続化する最も簡単な方法は、iptables-persistentパッケージを使用することです。

sudo apt-get install iptables-persistent 

そして、あなたはこれらのコマンドを使用して、いつでもiptablesのルール保存/復元することができ、それがインストールされています後:あなたがUbuntuの16にしている場合は

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

を次のようにそのパッケージをインストールします。04以降は、これらのコマンドは、あなたが作業したルールを取得し、あなたがそれらをテストした後にsaveコマンドを実行したいと思う

sudo netfilter-persistent save 
sudo netfilter-persistent reload 

です。サーバーが再起動すると、保存したルールが自動的にロードされます。

+0

Nginxのコードの目的/用途は何ですか?(参考:[link](https://gist.github.com/fnando/) 1101211))私は質問で言及したが、それは私のシナリオでは役に立ちませんか? –

+0

NginxコードはHTTPリクエストをGitlabホストに転送するために使用されますが、ポート22(SSHポート)でリッスンするように設定しています。それはポート80でリッスンする必要があります。 – BrokenBinary

+0

次に、このリンクで「SSHトンネルのNginx設定」というタイトルのコードが間違っていますか? –

1

nginxのプロキシがHTTP要求のためにあるのです。

SSHを使用してクローニングするときは、httpを使用していません。

あなたの必要なことは、ルータ上のポート転送や、サーバ上のiptablesのようなものを使用することです。

+0

しかし、Nginxコードの目的/用途は何ですか?(出典:[link](https://gist.github.com/fnando/1101211))質問で言及したように、シナリオ? –

+1

このコードの目的は、ポート80で受信したhttp要求をポート3000のlocalhostにリダイレクトすることです。ただし、常にリダイレクトされるhttpトラフィックです。あなたのコードでは、gitlabのWebインターフェイスを外部からアクセスできるようにすることができますが、nginxプロキシを使ってsshリクエストをhttpに変換することはできません。 iptablesを使ったBrokenBinaryの答えが道のりです。 – Jawad

+0

次に、この[リンク](https://gist.github.com/fnando/1101211)で「SSHトンネルのNginx設定」というタイトルのコードが間違っていますか? –

関連する問題