NgINX error_page - nginx

I have some virtual host configurated on my server.
I Need to set a common error_page for all them.
host1.conf
server {
listen 80;
server_name host1.com
root host1/path;
location / {
proxy_pass http://localhost:xxxx;
}
}
host2.conf
server {
listen 80;
server_name host2.com
root host2/path;
location / {
proxy_pass http://localhost:xxxx;
}
}
and so on.
1) Could I set the error_page in every .conf file?
Could I set the error_page in every .conf file? Or I'm able to set it only in a default .conf?
2) Problem with error redirect
I have a 404.html page and 50x.html page too on my default server.
So I added the follow instructions to all my host .conf files
error_page 404 /404.html;
location = /404.html {
root /path/to/default;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /path/to/default;
}
I see rightly that page but... they have some css, webfonts and images inclusion. That inclusions are not resolved, it seems they are looked on host root instead of default root.
There is a solution for have a single error page setted on a default site configuration and reused in all others conf?

Related

Set nginx to only monitor subdirectory

I'm trying to change nginx config file so that nginx only monitors localhost/test and stops monitoring localhost/.
I tried replacing the default file in /etc/nginx/conf.d/default.conf but I'm getting 404. I basically just changed location / { to location /test {
server {
listen 80;
listen [::]:80;
server_name localhost;
location /test {
alias /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
I'm unsure why this is not working. I also tried to change listen [::]:80; to listen [::]:80/test; but there I got an error invalid host in "80/test" of the "listen" directive
Edit:
I tried copying the index.html to /usr/share/nginx/html/test/ and changed alias in location to root but then when I navigated to localhost/test I got 403 Forbidden

How to provide custom nginx error_pages

Need to provide custom error pages on nginx. Currently config looks like below:
error_page 404 /404.html;
error_page 500 /500.html;
error_page 502 /502.html;
location ~ ^/(404.html|500.html|502.html){
root /etc/nginx/error-pages;
}
It works for urls like https://example.com/404, but it doesn't for https://example.com/404/404
How to make it work ? Thanks in advance.
We will create a location block for the file, where we are able to ensure that the root matches our file system location and that the file is only accessible through internal Nginx redirects:
error_page 404 /custom_404.html;
location = /custom_404.html {
root /etc/nginx/error-pages;
internal;
}
error_page 500 502 503 504 /custom_50x.html;
location = /custom_50x.html {
root /etc/nginx/error-pages;
internal;
}

How to Proxy Pass from / to /index.html

I'm currently working on a JS Project, that uses the url path. Now if I go on my website with example.com/, the JavaScript won't work, because I actually need example.com/index.html.
I'm already using an reverse proxy to proxy pass to two different docker containers. So my idea was to pass the request to example.com/index.html when example.com/ is called. But I can't figure out the regex stuff to achieve this goal.
My old config:
server {
listen 80;
server_name example.com;
# allow large uploads of files - refer to nginx documentation
client_max_body_size 1G;
# optimize downloading files larger than 1G - refer to nginx doc
before adjusting
#proxy_max_temp_file_size 2G;
location / {
proxy_pass http://structure.example:80;
}
location /cdn {
proxy_pass http://content.example:80;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Stuff I tried:
server {
listen 80;
server_name example.com;
# allow large uploads of files - refer to nginx documentation
client_max_body_size 1G;
# optimize downloading files larger than 1G - refer to nginx doc
before adjusting
#proxy_max_temp_file_size 2G;
location / {
proxy_pass http://structure.nocms:80/index.html;
}
location ~* \S+ {
proxy_pass http://structure.nocms:80;
}
location /cdn {
proxy_pass http://content.nocms:80;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
The accepted answer has one disadvantage: going to example.com explicitly redirects to example.com/index.html (that is, returns 301 Moved permanently), which is not always desired.
Instead, I suggest to prepend location / with another directive, location = /, which is designed to the root URL only:
location = / {
proxy_pass http://structure.nocms:80/index.html;
}
location / {
proxy_pass http://structure.nocms:80;
}
The above instructs nginx to pass requests to example.com directly to http://structure.nocms:80/index.html, while requesting any other URLs in example.com/* would pass the request to the corresponding URL in the downstream.
Below config should work for you
server {
listen 80;
server_name example.com;
# allow large uploads of files - refer to nginx documentation
client_max_body_size 1G;
# optimize downloading files larger than 1G - refer to nginx doc
before adjusting
#proxy_max_temp_file_size 2G;
location = / {
rewrite ^ /index.html permanent;
}
location / {
proxy_pass http://structure.example:80;
}
location /cdn {
proxy_pass http://content.example:80;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

nginx to serve specific case invariant subfolder

I want to have a subdomain my.domain.com. I want my.domain.com to serve an error page, and my.domain.com/one to serve app one and my.domain.com/two to serve app two. The location of one is /var/www/domain.com/One and two is likewise /var/www/domain.com/Two. I have tried (and (and (and tried)) yet nothing works. Here's what I've got.
server {
server_name my.domain.com;
root /var/www/domain.com;
index index.html;
location /one/ {
root /var/www/domain.com/One;
}
location /two/ {
root /var/www/domain.com/Two;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

Nginx change document root directory

I'm using the Windows setup file from Nginx For Windows
But It doesn't allow to change the install location, so it defaults to C:\nginx Is there a way to update the config file to change the root directory to D:\blabla?
Sample code from nginx.conf
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Use the -p parameter when you start nginx:
nginx -p "D:\blabla"
root d:/path/whereever;
will work without issues, but do use a proper windows version like the Butterfly or Caterpillar release and not those other crippled versions.
even a root '//192.168.2.5/mount/webdrive';
will work!
I don't know howit was two years ago but with an current Version (1.13.9) you only need to set the root of your Server
server {
listen 80;
server_name localhost;
location / {
root D:\blabla;
index index.html index.htm;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root D:\blabla;
}
}

Resources