เขามีแอปพลิเคชัน php ที่เข้าถึง proxmox และแสดงคอนโซล vnc โดยแบ่งปันโทเค็น นี่อยู่ในเซิร์ฟเวอร์ apache2 เราพยายามพร็อกซีคำขอ vnc ที่อยู่เบื้องหลัง apache ดังนั้นผู้ใช้ปลายทางไม่สามารถเข้าถึง proxmox ได้โดยตรง ปัญหาตามบันทึกที่ไม่มีตัวจัดการสำหรับ apache:
AH01144: ไม่มีตัวจัดการโปรโตคอลที่ถูกต้องสำหรับ URL /api2/json/nodes/server/qemu/vmid/vncwebsocket (แบบแผน 'wss') หากคุณใช้ mod_proxy เวอร์ชัน DSO ตรวจสอบให้แน่ใจว่าได้รวมโมดูลย่อยพร็อกซีไว้ในการกำหนดค่าโดยใช้ LoadModule
ปัญหาของฉันคือโหลดโมดูลและเซิร์ฟเวอร์รีสตาร์ทแล้ว:
root@server-01:~# apache2ctl -M
โหลดโมดูล:
core_module (คงที่)
so_module (คงที่)
watchdog_module (คงที่)
http_module (คงที่)
log_config_module (คงที่)
logio_module (คงที่)
version_module (คงที่)
unixd_module (คงที่)
access_compat_module (แชร์)
alias_module (แชร์)
auth_basic_module (แชร์)
authn_core_module (แชร์)
authn_file_module (แชร์)
authz_core_module (แชร์)
authz_host_module (แชร์)
authz_user_module (แชร์)
autoindex_module (แชร์)
deflate_module (ใช้ร่วมกัน)
dir_module (แชร์)
dumpio_module (แชร์)
env_module (แชร์)
filter_module (แชร์)
mime_module (แชร์)
mpm_prefork_module (แชร์)
โมดูลการเจรจาต่อรอง (ใช้ร่วมกัน)
php7_module (แชร์)
proxy_module (แชร์)
proxy_ajp_module (แชร์)
proxy_balancer_module (แชร์)
proxy_http_module (แชร์)
proxy_wstunnel_module (แชร์)
reqtimeout_module (แชร์)
rewrite_module (แชร์)
setenvif_module (แชร์)
slotmem_shm_module (แชร์)
socache_shmcb_module (แชร์)
ssl_module (แชร์)
status_module (แชร์)
การดำเนินการเป็นไปตามคำแนะนำต่อไปนี้:
https://forum.proxmox.com/threads/working-novnc-with-reverse-proxy-on-5-1.43644/
การกำหนดค่า apache สำหรับการพร็อกซีไปยัง proxmox คือ:
root@server01:~# cat /etc/apache2/sites-enabled/proxy-ssl.conf
<IfModule mod_ssl.c>
<โฮสต์เสมือน _default_:443>
ชื่อเซิร์ฟเวอร์ app01-proxy
ServerAdmin webmaster@localhost
SSLProxyEngine เปิดอยู่
LogLevel dumpio:trace7
DumpIOInput บน
เปิด DumpIOOutput
<สถานที่ />
ProxyPass https://proxmoxserver:8006/
ProxyPassReverse https://proxmoxserver:8006/
</สถานที่>
<LocationMatch ^/(api2/json/nodes/[^\/]+/[^\/]+/[^\/]+/vncwebsocket.*)$>
ProxyPass wss://proxmoxserver:8006/$1 ลองใหม่=0
</LocationMatch>
<ตำแหน่ง /websockify>
ProxyPass ws://proxmoxserver:8006/
ProxyPassReverse ws://proxmoxserver:8006/
</สถานที่>
บันทึกข้อผิดพลาด ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log รวมกัน
SSLEngine เปิดอยู่
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<ไดเรกทอรี /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</ไดเร็กทอรี>
</เวอร์ชวลโฮสต์>
และการกำหนดค่าอื่น ๆ สำหรับแอปพลิเคชันในเครื่อง:
root@server-01:~# cat /etc/apache2/sites-enabled/console-ssl.conf
<IfModule mod_ssl.c>
<โฮสต์เสมือน _default_:443>
ชื่อเซิร์ฟเวอร์ app01
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/hyper-controller/public
<ไดเรกทอรี /var/www/html/hyper-controller/public>
ดัชนีตัวเลือก FollowSymLinks MultiViews
AllowOverride ทั้งหมด
คำสั่งอนุญาตปฏิเสธ
อนุญาตจากทั้งหมด
ต้องได้รับอนุญาตทั้งหมด
</ไดเร็กทอรี>
บันทึกข้อผิดพลาด ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log รวมกัน
SSLEngine เปิดอยู่
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<ไดเรกทอรี /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</ไดเร็กทอรี>
เปิด php_flag log_errors
เปิด php_flag display_errors
php_value error_reporting 2147483647
php_value error_log /var/log/php.error.log
</เวอร์ชวลโฮสต์>
</หากโมดูล>
ข้อผิดพลาดที่เกิดขึ้นในระดับเบราว์เซอร์คือ:
ข้อผิดพลาด