nginxでリバースプロキシ

#####■初めに
　Nginxを使用してサブディレクトリでHTTPにアクセスさせる内容になります。
#####■目標
　Server1に搭載したJenkinsをClient-linからのアクセスで確認できるようにすること！
#####■環境

| 項目 | Server1 | Client-lin |
|:-:|:-:|:-:|:-:|
| OS | RHEL7 | RHEL7 |
| SW | Ansible 2.2 <br> jenkins 2.33  | nginx 1.11.6 |
| IP | XX.XX.XX.168  | XX.XX.XX.244  |

#####■構成とやること
　下記の構成のようにServer1にJenkinsを搭載します。するとJenkinsへのアクセスは下図の①のようになりますがClient-lin側にnginxを搭載しJenkinsへのアクセスを下図②のようにします。

![01_A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/e2832a29-6261-5079-58ad-1f486b32c9e2.png)

■補足
　Server1とClient-linとかなんなのって人は以下のリンクを見てください
　　・JenkinsからAnsibleを実行(1/2)
　　　http://qiita.com/yo_dazy/items/08ed86f53e3233fe14bb

では作業開始

***
まずは確認ってことでJenkinsが｢server1(xx.xx.xx.168)｣と｢Client-lin(xx.xx.xx.244)｣のどちらに入っているか確認します。

まずは｢Client-lin(xx.xx.xx.244)｣から・・・

```ruby:client-lin_JenkinsCheck
[root@client-lin /]# hostname
client-lin
[root@client-lin /]#
[root@client-lin /]#
[root@client-lin /]# rpm -qa | grep jenkins
[root@client-lin /]#
[root@client-lin /]#
```

うん。入っていません。続いて｢server1(xx.xx.xx.168)｣。。。

```ruby:server1_JenkinsCheck
[root@server1 ~]#
[root@server1 ~]# hostname
server1.us-west-2.compute.internal
[root@server1 ~]#
[root@server1 ~]#
[root@server1 ~]# rpm -qa | grep jenkins
jenkins-2.33-1.1.noarch
[root@server1 ~]#
```

入っています。念のためアクセスできるかも確認。
URL：http://XX.XX.XX.168:8080


![02A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/facea1ab-54bf-371b-fadf-cd69d9e096da.png)

OK!!Jenkinsは｢Server1(XX.XX.XX.168)｣の方にインストールされていてアクセスが可能であることがわかりました。
ではこれより、上記の構成通り[http://xx.xx.xx.244/jenkins]のアクセスを可能にします！！

***

#####■Nginx構築
作業対象　：　Client-lin(XX.XX.XX.244)
　前提：サーバログイン[Client-lin(XX.XX.XX.244)]にrootログイン
  ※Client-linとかRootログインとかわからないって人は前回のqiitaを見てね！

１）リポジトリ登録

```
コマンド　：　vi /etc/yum.repos.d/nginx.repo
```

```ruby:nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/rhel/7/$basearch/
gpgcheck=0
enabled=1
```
２）nginx インストール

```
コマンド　：　yum -y install nginx
```

```
[root@client-lin yum.repos.d]# yum -y install nginx
<略>
Installed:
  nginx.x86_64 1:1.11.6-1.el7.ngx

Complete!
[root@client-lin yum.repos.d]# 
[root@client-lin yum.repos.d]# nginx -V
nginx version: nginx/1.11.6
<略>
```

３）サービス設定

```
コマンド　:　systemctl enable nginx
コマンド　:　systemctl start nginx
```

インストール終了！！

４）確認
本当にインストールできているか確認する

```
パス：/usr/share/nginx/html/index.html
URL:http://XX.XX.XX.244/
```

![03A.png](https://qiita-image-store.s3.amazonaws.com/0/150678/96dd0a0c-786e-d18b-99f9-17c75c2f4782.png)



確認完了！

***

次は実際に｢server1(XX.XX.XX.168)｣に搭載しているJenkinsを｢Client-lin(XX.XX.XX.244)｣からアクセスできるようにします！！


目標　：
http://XX.XX.XX.168:8080のアクセスはできなくなりhttp://XX.XX.XX.244/jenkinsでのアクセスが可能になること

#####■Jenkins設定
作業対象　：　server1(XX.XX.XX.168)

１）Jenkinsに対してサブディレクトリを指定

```
コマンド　：　vi /etc/sysconfig/jenkins
```

```ruby:/etc/sysconfig/jenkins
(DEF)JENKINS_ARGS=""
(EDI)JENKINS_ARGS="--prefix=/jenkins"
```
２）サービス再起動

```
コマンド　：　systemctl restart jenkins
```

#####■nginx設定

作業対象　：　Client-lin(XX.XX.XX.244)

nginxのConfigを修正しバーチャルホストを設定する

１）Selinux httpd_can_network_connect の設定変更
これをやらないと起動時にPermisionErrorが出る

```
コマンド　：　setsebool httpd_can_network_connect on -P
```

２）Config修正
基本的にはdefault.confはバックアップを取り[base.conf]等に変更してから編集するみたいですが｢default.conf｣に直接書き込んでもできます！

```
コマンド　： vi /etc/nginx/conf.d/default.conf
```

```ruby:/etc/nginx/conf.d/default.conf
error_page   500 502 503 504  /50x.html;
location = /50x.html {
     root   /usr/share/nginx/html;
}
# 以下追加
# Jenkins
    location ~ /jenkins {
        proxy_read_timeout      300;
        proxy_connect_timeout   300;
        proxy_redirect          off;

        proxy_set_header        X-Forwarded-Proto       $scheme;
        proxy_set_header        Host                    $http_host;
        proxy_set_header        Host                    $host;
        proxy_set_header        X-Real-IP               $remote_addr;
        proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;

        proxy_pass              http://jenkins_server;

        access_log              /var/log/nginx/jenkins_access.log;
        error_log               /var/log/nginx/jenkins_error.log;
    }
```

３）バーチャルホスト作成
デフォルトでは存在しないので作成になります。またPublicIPが変更されるたびにここも書き換えないとたぶん動かない。（テストだから仕方なし！！）

```
コマンド　： vi /etc/nginx/conf.d/jenkins.conf
```

```ruby:/etc/nginx/conf.d/jenkins.conf
upstream jenkins_server {
 server <server1のPublicIP>:8080;
}
```

４）サービス再起動

```
コマンド　：　systemctl restart nginx
```
５）確認
まずは先ほど確認した。Server1にアクセスして確認します
URL:http://xx.xx.xx.168:8080



![04.png](https://qiita-image-store.s3.amazonaws.com/0/150678/02229915-1f0f-6a3f-13bc-eefa04185faf.png)

はい！見えません！
Jenkinsの設定により変更されました！

つぎは変更したClient-linで確認してみます
URL:http://xx.xx.xx.244/jenkins

![05.png](https://qiita-image-store.s3.amazonaws.com/0/150678/801d3627-1104-2f74-46f0-7cfb0541b536.png)

問題なく表示されました！

***
#####■まとめ
意外と簡単だった！！最後ちょっとはまったくらいでした。。。(^^)