我安装了Nginx 1.16并使用certbot应用ssl证书。
我的域是:h--ps://test.mydomain.com/
我将http转发到https。如果输入
然后转到
我还修改了所有错误页面,以指向默认的index.html页面。现在,所有类似404的错误都会显示默认的index.html。
如果我输入h--ps://test.mydomain.com/admin1,则什么都没发生。我正在尝试使用proxy_pass重定向admin1和admin2。
我的proxy_pass将admin1和admin2重定向到我的本地dart服务器。
我正在使用Ubuntu 18.04,我的/ etc / host显示为;
如果我输入h--p://127.0.0.1:3000 / admin1 /,我可以看到数据进入了我的飞镖服务器。
如果我输入h--p://127.0.0.1或h--p://127.0.1.1,则可以看到我的默认index.html
(A)如果键入这些内容,则会得到默认index.html
(B)但是我键入这些我什么也没得到。这意味着我的proxy_pass无法正常工作。
我的意图是,如果我在(B)中键入任何内容,则必须将其重定向到我的飞镖服务器。
示例:
必须重定向为
h--ps://test.mydomain.com/admin1或在admin1和admin2之后必须将任何内容重定向到h--p://127.0.0.1:3000 /作为h--p:// 127.0.0.1:3000/admin1
其余(包括错误页面)必须显示默认的index.html,并且只有这一部分有效。
我的问题是如何更正我的Nginx proxy_pass配置?
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
server {
charset UTF-8;
listen 80;
listen [::]:80;
server_name test.mydomain.com;
if ($host = test.mydomain.com) {
return 301 h**ps://$host$request_uri;
} # managed by Certbot
return 404; # managed by Certbot
}
server {
charset UTF-8;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
server_name test.mydomain.com;
ssl_certificate /etc/letsencrypt/live/test.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/test.mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# redirect error pages to the static page
error_page 404 /index.html;
location = /index.html {
root /usr/share/nginx/html;
internal;
}
# redirect server error pages to the static page
error_page 500 502 503 504 /index.html;
location = /index.htm {
root /usr/share/nginx/html;
internal;
}
# redirect to
location /admin1 {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "h**p://127.0.0.1:3000/";
try_files $uri $uri/ =200;
}
# redirect to
location /admin2 {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass "h**p://127.0.0.1:3000/";
try_files $uri $uri/ =200;
}
# deny access to .htaccess files
location ~ /\.ht {
deny all;
}
# Deny access to hidden files (beginning with a period)
location ~ /\. {
deny all;
}
}
更新:
当我查看文档(h --- ps://www.digitalocean.com/community/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching)时, match / here {proxy_pass http://example.com;})表示:
“当此块处理对/ match / here / please的请求时,请求URI将作为http://example.com/match/here/please发送到example.com服务器。我
在我的示例配置中;位置/ admin1 {proxy_pass“ h p://127.0.0.1:3000 /”;}不转到h p://127.0.0.1:3000 / admin1
我不确定我的etc / host配置是否正确。
更新2:
显示Nginx错误日志;
2019/06/29 13:27:37 [错误] 24590#24590:* 12 open()“ / usr / share / nginx / html / admin1”失败(2:无此类文件或目录),客户端: 127.0.0.1,服务器:test.mydomain.com请求:“ GET / admin1 HTTP / 2.0”,主机:“ test.mydomain.com”
如何纠正此错误,以便可以重定向/ admin网址?