Reputation: 650
Here are my nginx configure files.
On the default.conf, the first location is used to access /usr/share/nginx/html directory, it is ok while I access http://47.91.152.99. But when I add up a new location for directory /usr/share/nginx/public directory, nginx return me a 404 page while I access http://47.91.152.99/test.
So, what is the matter? Am I misuse the directive of nginx?
/etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ^~ /test/ {
root /usr/share/nginx/public;
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;
}
}
Upvotes: 26
Views: 228099
Reputation: 1721
You seem to be misusing the root directive in the following block;
location ^~ /test/ {
root /usr/share/nginx/public;
index index.html index.htm;
}
The previous block, as you use it, is telling nginx to look for directory test
into the folder /usr/share/nginx/public
. If there's no accessible test
folder at that location, nginx will return a 404. To solve this problem, i suggest using alias instead of root directive, like so;
location ^~ /test/ {
alias /usr/share/nginx/public;
index index.html index.htm;
}
In this block, which uses alias instead of root directive, a request for domain.com/test/somefile.jpg
would look for file somefile.jpg
into /usr/share/nginx/public
.
Look for more information on alias directive on nginx.org
Also, just for kicks, index directive can be set generally so you don't have to re-write it all the time, like so;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location / { }
location ~^/test/ {
alias /usr/share/nginx/public;
}
location = /50x.html {
root /usr/share/nginx/html;
}
}
One thing you should also consider... the more 'precise' the location block, the higher in your config it should reside. Like that location = /50x.html
. In a perfect world, that would be set up top, right after the general server block settings.
Hope it helps.
Upvotes: 42
Reputation: 49
cd /etc/nginx/sites-available/ sudo nano default
in this config file in https or server
$url /$url /index.html
Upvotes: 0
Reputation: 1066
Creating nginx & sftp pods using Kubernetes.. I've found that the mountPath in my sftp-deployment.yaml file is related to the username in my sftp-server.
And the error has happened when I have changed the username without changing mountPath value to match my username. So, the files were uploading to '/home/old-username' instead of '/home/new-username'.
Upvotes: 0
Reputation: 1
and my server-blocks.conf
server {
listen 80;
index index.html index.htm index.nginx-debian.html;
server_name 13.xxx.xxx.xx;
location / {
root /var/www/portaladmin/;
proxy_pass http://13.xxx.xxx.xx:80/;
}
error_log /var/log/nginx/portaladmin-erorr.log;
}
and my load-balancer.conf
server {
listen 80;
server_name xx.xxx.xxx.xx
access_log /home/ec2-user/logs/lb-access.log;
error_log /home/ec2-user/logs/lb-error.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://13.xxx.xxx.xx:80;
}
}
Upvotes: 0
Reputation: 21
I just solved this (index.html not found) issue.
For me, I misstyped my project name to match your ec2 project name with the nginx path.
Move to nginx/sites-enabled to check nginx path
cat
your_project_nameMove to home directory to check your project name
4. cd
5. ls
6. If your ec2 project name(for me: practice) is not match with your nginx path name(for me: practice) then you might got "index.html not found error"
Upvotes: 1
Reputation: 352
when your app is vuejs,you need write like this,can prevent 404,pay attention to double /test/
location ^~/test/ {
alias /usr/local/soft/vuejs/;
try_files $uri $uri/ /test/index.html;
}
Upvotes: 1
Reputation: 1315
location ^~ /test/ {
root /usr/share/nginx/public;
index index.html index.htm;
}
location ^~ /test/ {
alias /usr/share/nginx/public;
index index.html index.htm;
}
Extra tip: the index directive can be set so that you don't have to re-write it.
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location / { }
location ~^/test/ {
alias /usr/share/nginx/public;
}
location = /50x.html {
root /usr/share/nginx/html;
}
}
nginx matches Location blocks partly based on position in the config. Ideally, you would invert what you have now. The location block would be higher in nginx config. To that end, the location = /50x.html would also move up. Order is
More about nginx location priority. Also, you can always review the official documentation. The nginx documentation for location block http://nginx.org/en/docs/http/ngx_http_core_module.html#location
Upvotes: 15