Nginx Reverse Proxy DO NOT PASS Authorization

I set up nginx asking for basic auth for some IP blocks, here is the post: Nginx 特定 IP 需要认证.

But for some products, they read Authorization header to identify client as users. If so, these two different auth would be mixed and the backend application works bad.

To solve this, add this line to proxy:

Nginx Reverse Proxy DO NOT PASS Authorization by @sskaje: https://sskaje.me/2017/01/nginx-reverse-proxy-pass-authorization/

Running Atlassian Confluence/Bamboo/Bitbucket behind Nginx with SSL

It’s easy to set up a reverse proxy forwarding requests to Atlassian’s products.

If you look up posts on Atlassian’s official confluence, you’ll get something correct but confusing.

Here is my nginx configuration, for all products except Confluence:

I have haproxy in front of Nginx, if you don’t, let nginx listens to 0.0.0.0:443 and 0.0.0.0:80.

And, for built-in tomcat, make sure you have following lines in server.xml:

So bitbucket’s server.xml looks like

All other fields are all default values.

For Confluences, there’s something really stupid: ‘synchrony’.
According to official confluence, add lines below to nginx:

Other wise you’ll get function corrupted.

Running Atlassian Confluence/Bamboo/Bitbucket behind Nginx with SSL by @sskaje: https://sskaje.me/2017/01/running-atlassian-confluencebamboobitbucket-nginx-ssl/

Nginx 特定 IP 需要认证

文档: satisfy

参数 all 表示,所有条件都得满足;
参数 any 表示,任一条件满足即可。

所包含的条件包括 ngx_http_access_module, ngx_http_auth_basic_module, ngx_http_auth_request_module, 和 ngx_http_auth_jwt_module 这4个模块。

上述配置还处理了认证失败的跳转。

这个配置可以保存成独立的 .conf 文件,在 server {}include

Nginx 特定 IP 需要认证 by @sskaje: https://sskaje.me/2017/01/nginx-requires-auth-for-some-certain-ip/

内网半透明代理

因为不是传统意义上的透明代理,但是基本体验又差不多,姑且称之半透明代理。

背景

公司网络差,内网服务器的微信页面开发经常会被外网带宽影响到,一方面是因为引用了微信、阿里的js、css、字体等资源文件,另一方面,因为早前开发团队留下的坑,存在七牛云上的静态文件从接口端下发的url都带了实时的时间戳。

思路

先处理图片url带时间戳的坑,一方面接口是公共的,我在中间加了一层代理后,把无用的参数过滤掉,强制对结果做了一次小缓存;再安排接口端的同学改造遗留问题,确定了有意义的数据作为版本参数。这样至少保证终端用户能看到304,而不是每次都是200。

然后,所引用的静态文件,都是长时间不会修改的,公司网络如此糟糕的情况下,完全可以在本地搭建一个代理,把请求文件缓存下来。

方案

HTTP的代理很简单,nginx配置一个反向代理即可。
之前某些原因,nginx外边还加了一个haproxy,具体原因会在其他文章里解释。
haproxy可以作为 SNI proxy 使用,而流入的请求无非是http明文传输,或者https传输,需要代理的都是TCP的,所以 nginx 处理 http请求,haproxy 判断 SNI,转发tcp到定制的backend。

在此之前,需要在内网搭建 DNS 服务器,(这里我用了 dnsmasq),可以选择将内网 DHCP 的DNS服务器指向这里,或者把非 DNS 所在服务器的所有UDP 53的包转发到这个服务器上。

我的方案里,所有的服务都在内网的一台机器上。haproxy 监听了 内网IP的80,443端口,nginx 监听了 127.0.0.1:80,还有127.0.0.1:443给gitlab使用。

nginx配置很简单:

haproxy的配置同样:

需要指出的是,我ssl的backend的server,都是 dig 实际域名,拿第一级cname来用的。

最后 dnsmasq 劫持你所需要的域名的解析即可。

内网半透明代理 by @sskaje: https://sskaje.me/2016/10/semi-transparent-proxy/

Incoming search terms:

Nginx 反向代理 过滤Cookie

一个项目需求需要过滤HTTP头中的特定cookie项目。
代理使用nginx搭建,编译参数如下:

其中用到了两个插件:

https://github.com/simpl/ngx_devel_kit
https://github.com/openresty/lua-nginx-module

参考示例:

参考过滤脚本:

测试用例

Nginx 反向代理 过滤Cookie by @sskaje: https://sskaje.me/2015/03/nginx-proxy-filter-cookie/

Incoming search terms: