使用nginx做反向代理

首先

以下是使用Nginx允许在子目录中访问HTTP的内容。

■目标
■ 着眼点

确保可以通过Client-lin访问Server1上安装的Jenkins!

■环境

环境

項目Server1Client-linOSRHEL7RHEL7SWAnsible 2.2
jenkins 2.33nginx 1.11.6IPXX.XX.XX.168XX.XX.XX.244
■ 组成和要做的事情 hé zuò de

将Jenkins安装在Server1上,按照下图的构建方式。这样,访问Jenkins将按照图中的①连接方式进行。同时,在Client-lin端安装nginx来实现访问Jenkins的方式如下图的②。

01_A.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)”的…

[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)」。。。

[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 ~]#

请进入。为了确认一下,可以尝试访问一下。
链接:http://XX.XX.XX.168:8080

02A.png

好的!!我们确认 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!

1)注册代码库

コマンド : vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/rhel/7/$basearch/
gpgcheck=0
enabled=1

2)安装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
<略>

3) 服务设定

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

安装完成!

确保
确认一下是否真的已经成功安装了。

パス:/usr/share/nginx/html/index.html
URL:http://XX.XX.XX.244/
03A.png

确认完成了!


接下来,我们要确保 「Client-lin(XX.XX.XX.244)」 可以从服务器 「server1(XX.XX.XX.168)」 上访问 Jenkins。

目标:
无法访问http://XX.XX.XX.168:8080,而可以访问http://XX.XX.XX.244/jenkins。

■Jenkins的设置

目标服务器:server1(XX.XX.XX.168)

1)指定 Jenkins 的子目录

コマンド : vi /etc/sysconfig/jenkins
(DEF)JENKINS_ARGS=""
(EDI)JENKINS_ARGS="--prefix=/jenkins"

2)重新启动服务

コマンド : systemctl restart jenkins
■Nginx配置

作业对象:客户端 – lin(XX.XX.XX.244)

修改nginx配置并设置虚拟主机。

要更改Selinux的httpd_can_network_connect设置,否则在启动时会出现PermissionError。

コマンド : setsebool httpd_can_network_connect on -P

2)配置文件修正
一般来说,可以先备份default.conf并将其更名为[base.conf]等再进行编辑,但也可以直接在”default.conf”中进行修改!

コマンド : vi /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;
    }

3)创建虚拟主机
默认情况下不存在,需要创建。另外,每当公共IP发生更改时,这里也需要手动更改,否则可能无法正常运行。(由于是测试,所以无可奈何!!)

コマンド : vi /etc/nginx/conf.d/jenkins.conf
upstream jenkins_server {
 server <server1PublicIP>:8080;
}

4)重新启动服务。

コマンド : systemctl restart nginx

5)确认
首先,我们确认过了。我们要访问Server1进行确认
URL:http://xx.xx.xx.168:8080

04.png

好的!我看不见!这是由于 Jenkins 的设置被修改了!

下一步我会在经过改变的client-lin上进行确认。
URL:http://xx.xx.xx.244/jenkins

05.png

问题没有任何困难地显示出来了!


■总结

出乎意料地很容易!!最后只是遇到了一点困难。。。(^^)

广告
将在 10 秒后关闭
bannerAds