#nginxhelp 在应用程序上使用 Windows 身份验证反向代理到 Microsoft IIS 服务器
#nginxhelp Reverse Proxy to Microsoft IIS Server with Windows Authentication on the Application
服务器:Ubuntu:18.04.4
托管服务器:NGINX:1.16.1
学校需要将其学习管理系统发布到 Internet 上,以便 teachers/students 可以在家学习。
我是一名网络工程师,除了设置防火墙规则外,我对 NGINX 和反向代理服务器的经验很少。
所以,我几乎可以正常工作了。我的第一个配置似乎有效,它似乎通过了流量,并且我收到了登录提示,但是在输入有效凭据时我收到了身份验证错误。
我发现一些建议是由于 NTLM 身份验证。
我发现了一些进一步的信息,表明我需要使用 streams
。我试过了,甚至根本没有收到任何身份验证提示。
所以,我确实联系了 NGINX 看我是否需要 NGINX Plus,但他们说我应该先 post 在这里看看是否有人知道如何使它工作。
第一次配置尝试如下:
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name URL.URL.URL/daymap;
ssl_certificate /etc/ssl/certs/CERTNAME.crt;
ssl_certificate_key /etc/ssl/private2/KEYNAME.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
# ssl_dhparam /path/to/dhparam;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
resolver 172.31.4.10;
#proxy_set_header Host $http_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass_header Authorisation;
proxy_pass http://URL.URL.URL.URL.URL/daymap/;
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_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
client_max_body_size 0;
proxy_read_timeout 36000s;
proxy_redirect off;
}
}
流配置如下:
stream {
upstream backend {
hash $remote_addr consistent;
server URL.URL.URL:443 weight=5;
server IP.IP.IP.IP:443 max_fails=3 fail_timeout=30s;
}
upstream dns {
server 172.31.4.10:53;
server 172.31.4.11:53;
}
server {
listen 443;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
server {
listen 127.0.0.1:53 udp reuseport;
proxy_timeout 20s;
proxy_pass dns;
}
resolver 172.31.4.10;
}
如有任何见解,我将不胜感激。希望有人能看到我做错了什么。
问候,
杰森.
代理 NTLM 并不容易。 NTLM 身份验证重新查询客户端和服务器之间建立的单个连接。在这种情况下,keepalive 连接的使用将不起作用。
有关如何使用 NTLM 进行身份验证的更多详细信息:https://docs.microsoft.com/en-us/openspecs/office_protocols/ms-grvhenc/b9e676e7-e787-4020-9840-7cfe7c76044a
在 NGINX Plus(商业订阅)中有一个特殊的指令来告诉代理服务器 NTLM 已经到位。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ntlm
此指令仅在 NGINX Plus 中可用。使用 NGINX OSS,您可以使用流模块而不是 http 来处理后端连接的保活。
如果您需要更多帮助,请告诉我。
这在发布后大约 4 天开始自行运行。流配置是有效的配置。
希望这可以帮助别人。
服务器:Ubuntu:18.04.4 托管服务器:NGINX:1.16.1
学校需要将其学习管理系统发布到 Internet 上,以便 teachers/students 可以在家学习。
我是一名网络工程师,除了设置防火墙规则外,我对 NGINX 和反向代理服务器的经验很少。
所以,我几乎可以正常工作了。我的第一个配置似乎有效,它似乎通过了流量,并且我收到了登录提示,但是在输入有效凭据时我收到了身份验证错误。
我发现一些建议是由于 NTLM 身份验证。
我发现了一些进一步的信息,表明我需要使用 streams
。我试过了,甚至根本没有收到任何身份验证提示。
所以,我确实联系了 NGINX 看我是否需要 NGINX Plus,但他们说我应该先 post 在这里看看是否有人知道如何使它工作。 第一次配置尝试如下:
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name URL.URL.URL/daymap;
ssl_certificate /etc/ssl/certs/CERTNAME.crt;
ssl_certificate_key /etc/ssl/private2/KEYNAME.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
# ssl_dhparam /path/to/dhparam;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=63072000" always;
resolver 172.31.4.10;
#proxy_set_header Host $http_host;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass_header Authorisation;
proxy_pass http://URL.URL.URL.URL.URL/daymap/;
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_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
client_max_body_size 0;
proxy_read_timeout 36000s;
proxy_redirect off;
}
}
流配置如下:
stream {
upstream backend {
hash $remote_addr consistent;
server URL.URL.URL:443 weight=5;
server IP.IP.IP.IP:443 max_fails=3 fail_timeout=30s;
}
upstream dns {
server 172.31.4.10:53;
server 172.31.4.11:53;
}
server {
listen 443;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
server {
listen 127.0.0.1:53 udp reuseport;
proxy_timeout 20s;
proxy_pass dns;
}
resolver 172.31.4.10;
}
如有任何见解,我将不胜感激。希望有人能看到我做错了什么。
问候,
杰森.
代理 NTLM 并不容易。 NTLM 身份验证重新查询客户端和服务器之间建立的单个连接。在这种情况下,keepalive 连接的使用将不起作用。
有关如何使用 NTLM 进行身份验证的更多详细信息:https://docs.microsoft.com/en-us/openspecs/office_protocols/ms-grvhenc/b9e676e7-e787-4020-9840-7cfe7c76044a
在 NGINX Plus(商业订阅)中有一个特殊的指令来告诉代理服务器 NTLM 已经到位。
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ntlm
此指令仅在 NGINX Plus 中可用。使用 NGINX OSS,您可以使用流模块而不是 http 来处理后端连接的保活。
如果您需要更多帮助,请告诉我。
这在发布后大约 4 天开始自行运行。流配置是有效的配置。 希望这可以帮助别人。