Nginx反向代理解决cas-server单点登录内外网问题

1. nginx下载

本文所用软件包

nginx-1.24.0.tar.gz

下载地址:(https://nginx.org/download/nginx-1.24.0.tar.gz)(最新)源码包

headers-more-nginx-module-0.34.tar.gz

下载地址(https://codeload.github.com/openresty/headers-more-nginx-module/tar.gz/refs/tags/v0.34)(最新)插件源码

2. nginx安装

2.1首次源码安装nginx

#查看gcc版本
gcc -v


#安装gcc
yum -y install gcc

#pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库
yum install -y pcre pcre-devel

#zlib安装
yum install -y zlib zlib-devel

#安装openssl
yum install -y openssl openssl-devel

#下载nginx安装包
wget https://nginx.org/download/nginx-1.24.0.tar.gz

# 下载headers-more-nginx-module安装包
wget https://codeload.github.com/openresty/headers-more-nginx-module/tar.gz/refs/tags/v0.34

# 解压文件
tar -zxvf nginx-1.24.0.tar.gz
tar -zxvf v0.34

#切换到 /root/nginx-1.24.0下面
cd /root/nginx-1.24.0

# 执行命令
./configure --prefix=/usr/local/nginx
make
make install

#查看nginx是否正常安装
whereis nginx

#切换到/usr/local/nginx安装目录
cd /usr/local/nginx/conf

#配置nginx的配置文件nginx.conf文件,主要也就是端口
vim nginx.conf

# 创建 错误日志文件夹
mkdir /var/log/nginx/

#nginx常用命令
#先进入nginx目录
cd /usr/local/nginx/sbin

#启动服务
./nginx

#测试配置是否正常
./nginx -t

#重新加载
./nginx -s reload

#关闭服务
./nginx -s stop

查看nginx服务是否启动成功
ps -ef | grep nginx

2.2安装ssl相关模块和headers-more-nginx-module模块

# 先查看nginx原有的模块

 /usr/local/nginx/sbin/nginx -V

#configure arguments: --prefix=/usr/local/nginx则代表未安装SSL模块,未安装headers-more-nginx-module模块

# 那么安装好的参数应该是这样

#在之前解压的nginx源码目录下执行以下

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --add-module=/root/headers-more-nginx-module-0.34 (解压后的目录)

#  --add-module=其他模块如echo模块

# make生成

make #这里不要进行make install,否则就是覆盖安装

# 然后备份原有已安装好的nginx

cp /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak

# 然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)

# 先停止nginx

/usr/local/nginx/sbin/nginx -s stop

# 再进行覆盖

cp ./objs/nginx /usr/local/nginx/sbin/

# 然后启动nginx,仍可以通过命令查看是否已经加入成功

/usr/local/nginx/sbin/nginx -V

# 配置信息指向-调整

# 如果无法停止nginx 可能配置指向已经变化,需要重现调整回原来自己配置的路径

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3.配置ssl

3.1生成自签名脚本

脚本具体代码如下(有部分修改):根据需求也可以自行修改脚本代码,比如有效时长等等

​#!/bin/sh

# create self-signed server certificate:

read -p "Enter your domain [www.example.com]: " DOMAIN

echo "Create server key..."

openssl genrsa -des3 -out $DOMAIN.key 1024

echo "Create server certificate signing request..."

SUBJECT="/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=$DOMAIN"

openssl req -new -subj $SUBJECT -key $DOMAIN.key -out $DOMAIN.csr

echo "Remove password..."

mv $DOMAIN.key $DOMAIN.origin.key

openssl rsa -in $DOMAIN.origin.key -out $DOMAIN.key

echo "Sign SSL certificate..."

openssl x509 -req -days 3650 -in $DOMAIN.csr -signkey $DOMAIN.key -out $DOMAIN.crt

echo "TODO:"

echo "Copy $DOMAIN.crt to /etc/nginx/ssl/$DOMAIN.crt"

echo "Copy $DOMAIN.key to /etc/nginx/ssl/$DOMAIN.key"

echo "Add configuration in nginx:"

echo "server {"

echo "    listen 443 ssl"

echo "    ..."

echo "    ssl on;"

echo "    ssl_certificate     /etc/nginx/ssl/$DOMAIN.crt;"

echo "    ssl_certificate_key /etc/nginx/ssl/$DOMAIN.key;"

echo "    ssl_protocols   TLSv1 TLSv1.1 TLSv1.2"

echo "    ssl_ciphers     HIGH:!aNULL:!MD5"

echo "}"

​

将以上脚本保存为sh文件,如:gencert.sh

3.2生成证书操作

$ sh ./gencert.sh

# 根据提示输入域名以及四次口令,注意这四次口令输入的都是一样的且同时包含字母和数字

执行上面的脚本后,会在脚本所在目录生成证书

3.3配置ssl

# 复制证书至/etc/nginx/ssl目录,如果目录不存在,请新建

cp test.com.crt /etc/nginx/ssl/test.com.crt 

cp test.com.key /etc/nginx/ssl/test.com.key

# 修改nginx的server配置

server {

    listen  443 ssl;

    #强制使用https访问

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;

    ...# 此处省略其它配置内容

    ssl_certificate     /etc/nginx/ssl/test.com.crt; #证书格式有多种,常见的有pem、cer等

    ssl_certificate_key /etc/nginx/ssl/test.com.key;

    ssl_session_timeout 5m;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_prefer_server_ciphers on;

}

4.配置代理

添加对302重定向地址的处理,并代理相关应用程序

# 使用map指令解析要更改的$location变量

map $sent_http_location $location{

      ~/cas-server([\S]+$) https://172.16.20.111/cas-server$1;

      ~/oaquery([\S]+$) https://172.16.20.111/oaquery$1;

      default $sent_http_location;

}

#高版本的Nginx用这种方式

#注意:有的版本中,通过$upstream_http_Location会一直取不到值,可以使用$sent_http_location来代替,$sent_http_location是不带IP的请求路径

# map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。

# map 的主要作用是创建自定义变量,通过使用 nginx 的内置变量,去匹配某些特定规则,如果匹配成功则设置某个值给自定义变量。 而这个自定义变量又可以作于他用。

# 以上代码作用为:将响应的location,按照请求前缀进行匹配,并重新组装为新定义变量$location。

# ~/cas-server([\S]+$):代表以/cas-server开头的路径,其中([\S]+$)代表将/cas-server后面的部分定义变量;匹配的路径将映射到https://172.16.20.111/cas-server$1;,$1即为([\S]+$)匹配的变量,最后拼成新的location地址

# default:表示以上匹配规则都匹配不成功时,默认设置的location地址

# 注意:([\S]+$)匹配的是任意非空白字符,如果是http://172.16.20.22:8088/cas-server这样的地址将不会匹配,为此需要修改程序跳转的地址,只需在后面添加/,即 http://172.16.20.22:8088/cas-server/就可以了

# 对相关应用配置代理,并设置302重定向地址

location /cas-server {

      proxy_pass http://172.16.20.22:8088;

      more_set_headers -s '302' "Location $location";

}

location /oaquery {

      proxy_pass http://172.16.20.190:9099;

      more_set_headers -s '302' "Location $location";

}

5.测试

浏览器访问:https://172.16.20.111/oaquery,

程序会重定向到: https://172.16.20.111/cas-server/login?service=http%3A%2F%2F172.16.20.190%3A9099%2Foaquery%2Fj_cas_login

发现重定向地址并不是程序中配置的默认地址 http://172.16.20.22:8088/cas-server/login?service=http%3A%2F%2F172.16.20.190%3A9099%2Foaquery%2Fj_cas_login

至此,Nginx反向代理解决cas-server单点登录内外网问题配置已完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值