因为esxi默认是ssl链接,因此要转发也是ssl转发
本地环境:
nginx所在服务器:192.168.68.98
esxi所在服务器:192.168.68.250
实现:https://192.168.68.98:8001 到 https://192.168.68.250/ui
1.生成本地nginx所在服务器的自签证书
2.配置nginx
3.重启nginx
第一步,生成本地nginx所在服务器的自签证书
生成证书3650天,域名要写当前服务器IP,用于验证本地ssl
| #证书有效期3650天
openssl req -x509 -nodes -days 3650 \
-newkey rsa:2048 \
-keyout /etc/nginx/ssl/esxi-proxy.key \
-out /etc/nginx/ssl/esxi-proxy.crt
|
第二步,配置nginx
根据自建需求做ip转发
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 | # 首先需要生成自签名证书(如果没有的话)
# 执行以下命令生成证书(在Nginx服务器上):
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/esxi-proxy.key -out /etc/nginx/ssl/esxi-proxy.crt
server {
# 监听HTTPS的8001端口(与后端ESXi协议一致)
listen 8001 ssl;
server_name 192.168.68.98;
# 配置SSL证书
ssl_certificate /etc/nginx/ssl/esxi-proxy.crt;
ssl_certificate_key /etc/nginx/ssl/esxi-proxy.key;
# SSL基本配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
# 后端ESXi的SSL处理
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;
proxy_ssl_name 192.168.68.250;
proxy_ssl_server_name on;
proxy_ssl_verify off;
proxy_ssl_session_reuse on;
# 关键头信息(协议保持HTTPS一致)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host 192.168.68.250; # 必须保持与ESXi一致
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 这里会传递HTTPS协议
# 处理Cookie和会话
proxy_cookie_path / /;
proxy_cookie_domain 192.168.68.250 192.168.68.98:8001;
proxy_redirect https://192.168.68.250/ https://$host:$server_port/;
proxy_redirect https://192.168.68.250/ui/ https://$host:$server_port/ui/;
# 超时设置(解决登录过程中断)
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
# 转发所有请求
location / {
proxy_pass https://192.168.68.250/;
}
# UI路径专门处理
location /ui/ {
proxy_pass https://192.168.68.250/ui/;
# 额外处理ESXi UI的静态资源
proxy_set_header Accept-Encoding ""; # 禁用压缩,避免资源加载问题
sub_filter_types text/css text/javascript application/javascript;
sub_filter 'https://192.168.68.250' 'https://$host:$server_port';
sub_filter_once off;
}
}
|
第三步,重启nginx