IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> nginx配置正向代理以及增加密码验证 -> 正文阅读

[系统运维]nginx配置正向代理以及增加密码验证

使用正向代理http/https来做一些特殊访问,由于直接暴露于不安全,所以需要增加密码验证;但是实验了好多方案,此方案终于成功,由此记录一下;

构建nginx

增加https支持模块,由于验证需要使用到lua脚本,所以同时也需要集成openresty相关lib

1.openresty安装

官方安装说明(debian)

由于我目前系统使用的debian,所以直接参考安装即可。其他系统安装请参考官方文档

# 1. install some prerequisites needed by adding GPG public keys (could be removed later):
sudo apt-get -y install --no-install-recommends wget gnupg ca-certificates
# 2. import our GPG key:
wget -O - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
# 3. add the our official APT repository.
# x86_64 or amd64 systems
codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release`

echo "deb http://openresty.org/package/debian $codename openresty" \
    | sudo tee /etc/apt/sources.list.d/openresty.list

#arm64 or aarch64 
codename=`grep -Po 'VERSION="[0-9]+ \(\K[^)]+' /etc/os-release`

echo "deb http://openresty.org/package/arm64/debian $codename openresty" \
    | tee /etc/apt/sources.list.d/openresty.list

# 4.update the APT index:
apt-get update
apt-get -y install openresty

2.安装luaJIT

安装并配置相关环境


# 下载包后解压
cd luajit2-2.1-20220411
make install PREFIX=/usr/local/LuaJIT

# 配置环境变量
vim ~/.profile
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1
source ~/.profile

3.编译nginx、增加相关模块

需要安装以下模块,如果已经安装,可以不进行安装
nginx版本为1.20.2
ngx_http_proxy_connect_module(0.0.2)github-proxy-connect
lua-nginx-module(0.10.20)github-lua-nginx-module
ngx_devel_kit(0.3.1)github-ngx_devel_kit

# 编译nginx
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' --add-module=/opt/ngx-fancyindex-0.5.2 --add-module=/opt/ngx_http_proxy_connect_module-0.0.2 --add-module=/opt/lua-nginx-module-0.10.20 --add-module=/opt/ngx_devel_kit-0.3.1
# 编译不进行直接安装
make 

# 可以先到输出目录实验下,否则可能由于某些情况无法启动nginx

4.配置nginx正向代理、密码

主要修改nginx.conf中的信息

# 解决 failed to load the 'resty.core' module (https://github.com/openresty/lua-resty-core); ensure you are using an OpenResty release from https://openresty.org/en/download.html (reason: module 'resty.core' not found
 http{

 lua_package_path "/usr/local/openresty/lualib/?.lua;";
 }

# nginx 正向代理配置
 server {
    listen                         16888;
    # dns resolver used by forward proxying
    resolver                       180.76.76.76;

    # forward proxy for CONNECT request
    proxy_connect;
    proxy_connect_allow            443 80;
    proxy_connect_connect_timeout  10s;
    proxy_connect_read_timeout     10s;
    proxy_connect_send_timeout     10s;
    auth_basic "Authorized";
    auth_basic_user_file passwd; 
    rewrite_by_lua_file proxy_auth.lua;

    # forward proxy for non-CONNECT request
    location / {
		proxy_ssl_server_name on;
        proxy_pass http://$host;
        proxy_set_header Host $host;
        proxy_hide_header Authorization;
        proxy_hide_header Proxy-Authorization;
              
    }
}

passwd生成

htpasswd -c -d /etc/nginx/passwd username
#输入密码后即可生成对应passwd文件 

proxy_auth.lua

touch proxy_auth.lua
vim proxy_auth.lua
# 插入以下内容
--check Proxy-Authorization for https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/407
if not ngx.var.http_proxy_authorization then
	ngx.header["Proxy-Authenticate"] = "Basic realm=\"Access to internal site\""
	ngx.exit(407)
end

-- transfer Proxy-Authorization header to Authorization for auth basic module
ngx.req.set_header("Authorization", ngx.var.http_proxy_authorization)

5.启动后验证

curl -x 127.0.0.1:16888 https://www.baidu.com -U username:password

ps:相关插件已打包,如果下载不便可以直接下载
csdn下载

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-16 11:30:21  更:2022-05-16 11:30:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:01:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码