Hi,
I am trying to add reverse proxy template to show content from a subdomain based on domainname.
For ex: example.com should show content from example.maindomain.com
I tried to use %domain%, but it gets full name including TLD value like example.com.maindomain.com
Is there any nginx variable or code available to get only domain name without domain suffix or TLD?
Nginx get domainname without TLD or suffix
- myVesta
- Site Admin
- Posts: 949
- Joined: Fri Jun 19, 2020 9:59 am
- Has thanked: 9 times
- Been thanked: 6 times
Nope.
You can only make it static string in tpl file, if you need it only for one domain?
Other possibility is to make yourtemplate.sh that alter apache/nginx config files, something like this - http://dl.myvestacp.com/vesta/vesta-cp- ... forward.sh
You can only make it static string in tpl file, if you need it only for one domain?
Other possibility is to make yourtemplate.sh that alter apache/nginx config files, something like this - http://dl.myvestacp.com/vesta/vesta-cp- ... forward.sh
Code: Select all
file=/home/$user/conf/web/$domain.nginx.conf
if [ -f "$file" ]; then
sed -i "s/FORWARDTO/$FORWARDTO/g" $file
fi
hi, thanks for the reply.
but i wanted this to be applied for all the domain added on myvestacp using a specific template.
Note: i'm doing domain addition through api.
but here is the list of things i did so far.
created 2 files on /usr/local/vesta/data/templates/web/nginx/
1. reverse-force-https.tpl ( clone of force-https.tpl ) - no changes done.
2. reverse-force-https.stpl - clone of force-https.stpl and added proxy_header addition.
here is the code of reverse-force.stpl
on location / , i'am added proxy_header
proxy_set_header Host %domain%.actor.com;
but after adding domain i was expecting a value of domain name without suffix on web config generated,
so if i add testing.com domain, the proxy header should be
proxy_set_header Host testing.actor.com;
but what i get is
proxy_set_header Host testing.com.actor.com;
do we have something like php explode %domain% and get first array value.
so i can simply replace %domain% with that ?
Thanks.
but i wanted this to be applied for all the domain added on myvestacp using a specific template.
Note: i'm doing domain addition through api.
but here is the list of things i did so far.
created 2 files on /usr/local/vesta/data/templates/web/nginx/
1. reverse-force-https.tpl ( clone of force-https.tpl ) - no changes done.
2. reverse-force-https.stpl - clone of force-https.stpl and added proxy_header addition.
here is the code of reverse-force.stpl
Code: Select all
server {
listen %ip%:%proxy_ssl_port% ssl http2;
server_name %domain_idn% %alias_idn%;
ssl_certificate %ssl_pem%;
ssl_certificate_key %ssl_key%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
location / {
proxy_pass https://%ip%:%web_ssl_port%;
proxy_set_header Host %domain%.actor.com;
location ~* ^.+\.(%proxy_extentions%)$ {
root %sdocroot%;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
# try_files $uri @fallback;
}
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
location @fallback {
proxy_pass https://%ip%:%web_ssl_port%;
}
location ~ /\.ht {return 404;}
location ~ /\.env {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
disable_symlinks if_not_owner from=%docroot%;
include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt;
include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*;
}
proxy_set_header Host %domain%.actor.com;
but after adding domain i was expecting a value of domain name without suffix on web config generated,
so if i add testing.com domain, the proxy header should be
proxy_set_header Host testing.actor.com;
but what i get is
proxy_set_header Host testing.com.actor.com;
do we have something like php explode %domain% and get first array value.
so i can simply replace %domain% with that ?
Thanks.
hi. any update on this.
i hope many developers will be looking for similar solution for SaSS product hosted on single domain and served to individual users by subdomains, and when end user requires custom domain to show content from a sub-domain this workaround is required.
based on some solutions i tried below steps.
1.
add map function on /etc/nginx/nginx.conf inside http block
when i do this, i get $domain undefined variable error. without $ symbol, there is no error, but again it doesnt seems to be working.
2.
added proxy pass on forcessl.tpl file at /usr/local/vesta/data/templates/web/nginx/force-https.stpl
I need to use map function to get value of domain withoud tld on tpl file.
can you please help me with a solution for this?
i hope many developers will be looking for similar solution for SaSS product hosted on single domain and served to individual users by subdomains, and when end user requires custom domain to show content from a sub-domain this workaround is required.
based on some solutions i tried below steps.
1.
add map function on /etc/nginx/nginx.conf inside http block
Code: Select all
map $domain $domain_without_tld {
~^(?<domain_name>[^.]+)\..+$ $domain_name;
}
2.
added proxy pass on forcessl.tpl file at /usr/local/vesta/data/templates/web/nginx/force-https.stpl
Code: Select all
location / {
proxy_pass https://%ip%:%web_ssl_port%;
proxy_set_header Host $domain_without_tld.%domain_idn%;
location ~* ^.+\.(%proxy_extentions%)$ {
root %sdocroot%;
access_log /var/log/%web_system%/domains/%domain%.log combined;
access_log /var/log/%web_system%/domains/%domain%.bytes bytes;
expires max;
# try_files $uri @fallback;
}
}
can you please help me with a solution for this?