-
-
Save sergey-dryabzhinsky/2af5f7c56e1ee01ce128e04bf38ee99a to your computer and use it in GitHub Desktop.
### | |
# Nginx vhost file to hide Proxmox pveproxy | |
# For 3.4+, 5.x version. | |
# | |
# Do not forget to create file | |
# /etc/default/pveproxy: | |
# ALLOW_FROM="127.0.0.1" | |
# DENY_FROM="all" | |
# POLICY="allow" | |
# | |
# @2019-08-05 | |
# - disable big iso/templates upload buffering | |
# | |
# @2018-08-01 - changes | |
# - add missing special locations for proxmoxlib.js, vnc | |
# | |
# @2017-11-17 - changes | |
# - use nginx-1.10+ for https | |
# - move proxy_params inside locations cos | |
# some parameters/header are dropping to defaults by the way | |
# - add other hacks to skip proxy to pveproxy: docs | |
# - add special location for api access | |
# - add some descriptions to options | |
server { | |
# nginx-1.0+ | |
#listen 443 ssl; | |
# nginx-1.6+ | |
#listen 443 ssl spdy; | |
# nginx-1.10+ | |
listen 443 ssl http2; | |
root /var/www/default; | |
# Set YOUR server name here | |
server_name proxmox.example.com; | |
# Check for cross-framing - nuke bustards | |
valid_referers none blocked server_names; | |
if ($invalid_referer) { | |
return 403; | |
} | |
# Hint for browsers | |
add_header X-Frame-Options SAMEORIGIN; | |
# Don't "detect" file type by extension (IE10+?) | |
add_header X-Content-Type-Options nosniff; | |
access_log /var/log/nginx/proxmox.example.com-ssl-access.log; | |
error_log /var/log/nginx/proxmox.example.com-ssl-error.log; | |
# load images, backups, iso... | |
client_max_body_size 64m; | |
include proxy_params; | |
# Your certificates here must be | |
include ssl/proxmox.conf; | |
# restrict supported by pveproxy ssl protocols | |
# Special for Proxmox-3 | |
proxy_ssl_protocols TLSv1; | |
# Special for Proxmox-5+ | |
#proxy_ssl_protocols TLSv1.2; | |
location / { | |
# Magic for VNC | |
proxy_set_header Upgrade $http_upgrade; | |
proxy_set_header Connection "upgrade"; | |
include proxy_params; | |
proxy_pass https://127.0.0.1:8006; | |
} | |
location ~* ^/(api2|novnc)/ { | |
proxy_redirect off; | |
# Magic for VNC | |
proxy_set_header Upgrade $http_upgrade; | |
proxy_set_header Connection "upgrade"; | |
# Upload templates/iso | |
location ~* ^/api2/json/nodes/.*/storage/.*/upload { | |
client_max_body_size 2000m; | |
# nginx-1.8+ | |
proxy_request_buffering off; | |
proxy_max_temp_file_size 0; | |
include proxy_params; | |
proxy_pass https://127.0.0.1:8006; | |
} | |
include proxy_params; | |
proxy_pass https://127.0.0.1:8006; | |
} | |
# MAGICK !!! | |
# Proxmox Web-UI loads DEBUG version of ExtJS | |
# And nginx waaaaaing sooo long. And hangs. | |
# Do not proxy static files, just give them | |
location ~* ^/pve2/(?<file>.*)$ { | |
gzip_static on; | |
root /usr/share/pve-manager; | |
try_files /$file @proxmox; | |
} | |
# Special for proxmox-5.x | |
location ~* ^/proxmox.*\.js$ { | |
gzip_static on; | |
root /usr/share/usr/share/javascript/proxmox-widget-toolkit; | |
try_files $uri @proxmox; | |
} | |
location ~* ^/pve-docs/(?<file>.*)$ { | |
gzip_static on; | |
root /usr/share/pve-docs; | |
try_files /$file @proxmox; | |
} | |
location @proxmox { | |
internal; | |
# Magic for VNC | |
proxy_set_header Upgrade $http_upgrade; | |
proxy_set_header Connection "upgrade"; | |
# nginx-1.8+ | |
proxy_request_buffering off; | |
proxy_max_temp_file_size 0; | |
include proxy_params; | |
proxy_pass https://127.0.0.1:8006; | |
} | |
} |
In case anyone "really" doesn't want pveproxy to be listening on all interfaces
Edit /usr/share/perl5/PVE/Service/pveproxy.pm
Change:
my $socket = $self->create_reusable_socket(8006, undef, $family);
To:
my $socket = $self->create_reusable_socket(8006, '127.0.0.1', $family);
systemctl restart pveproxy.service
netstat -tupln | grep pveproxy
And keep /etc/default/pveproxy settings just in case "pveproxy.pm" got overwritten by a Proxmox update
Everything works fine, except when I use file upload :-)) Can you help with this:
2019/02/22 18:26:30 [error] 15387#15387: *15 upstream prematurely closed connection while reading response header from upstream, client: 192.168.0.15, server: 192.168.10.60, request: "POST /api2/json/nodes/proxmox-node-2/storage/local/upload HTTP/1.1", upstream: "https://127.0.0.1:8006/api2/json/nodes/proxmox-node-2/storage/local/upload", host: "192.168.10.60", referrer: "https://192.168.10.60/"
I just want to upload Debian.iso to the local datastore, the iso is 290MB large.
@KpuCko
Updated gist - disable buffering of request/response on upload.
You'll need nginx >= 1.8
Can u explain how to install ?
Regards,
@aguerrave
Copy this file into /etc/nginx/sites-enabled/ directory or where is your installation keep nginx configs.
Change server_name ...
line to your proxmox server dns-name.
Reload nginx instance.
We need to install in host proxmox or in a the virtual machine ?
/etc/nginx/sites-enabled# journalctl -xe
Feb 08 17:26:32 condor3160 nginx[9062]: nginx: [emerg] open() "/etc/nginx/ssl/proxmox.conf" failed (2: No such file or directory) in /etc/nginx/con
Feb 08 17:26:32 condor3160 nginx[9062]: nginx: configuration file /etc/nginx/nginx.conf test failed
Feb 08 17:26:32 condor3160 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: https://www.debian.org/support-- An ExecStartPre= process belonging to unit nginx.service has exited.
-- The process' exit code is 'exited' and its exit status is 1.
Feb 08 17:26:32 condor3160 systemd[1]: nginx.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support-- The unit nginx.service has entered the 'failed' state with result 'exit-code'.
Feb 08 17:26:32 condor3160 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
-- Subject: A start job for unit nginx.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support-- A start job for unit nginx.service has finished with a failure.
-- The job identifier is 264934 and the job result is failed.
lines 7023-7046/7046 (END)
Feb 08 17:26:32 condor3160 nginx[9062]: nginx: [emerg] open() "/etc/nginx/ssl/proxmox.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/nginx-vhost-proxpr
Feb 08 17:26:32 condor3160 nginx[9062]: nginx: configuration file /etc/nginx/nginx.conf test failed
Feb 08 17:26:32 condor3160 systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: https://www.debian.org/support-- An ExecStartPre= process belonging to unit nginx.service has exited.
-- The process' exit code is 'exited' and its exit status is 1.
Feb 08 17:26:32 condor3160 systemd[1]: nginx.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support-- The unit nginx.service has entered the 'failed' state with result 'exit-code'.
Feb 08 17:26:32 condor3160 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
-- Subject: A start job for unit nginx.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support-- A start job for unit nginx.service has finished with a failure.
-- The job identifier is 264934 and the job result is failed.
I assume that you use these configs on proxmox host machine.
You should define ssl configs for nginx in file /etc/nginx/ssl/proxmox.conf
- paths to certificate and key, cyphers.
Read about it there: https://nginx.org/en/docs/http/configuring_https_servers.html
Or disable line with include ssl/proxmox.conf
. And change listen option to listen 80;
. Not recommended though.
Updated gist: restrict proxy ssl protocols to supported by pveproxy.
On Proxmox-3 its limited to TLSv1.1, on Proxmox-5+ - to TLSv1.2.
Update gist: on Proxmox-3 pveproxy limited to TLSv1.
@stirch
include proxy_params;
- includes/etc/nginx/proxy_params
file.It's available in Debian/Ubuntu build.
But if you don't have it here it is: