如何在Nginx配置上更正proxy_pass?

时间:2019-06-29 08:39:53

标签: nginx redirect proxypass certbot

我安装了Nginx 1.16并使用certbot应用ssl证书。

我的域是:h--ps://test.mydomain.com/

我将http转发到https。如果输入

  • h--p://test.mydomain.com/

然后转到

  • h--ps://test.mydomain.com/

我还修改了所有错误页面,以指向默认的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显示为;

  • 本地主机127.0.0.1
  • mymachinename 127.0.1.1

如果我输入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

  • h ** ps://test.mydomain.com
  • h ** ps://test.mydomain.com/
  • h ** ps://test.mydomain.com/fdfhrhtrh

(B)但是我键入这些我什么也没得到。这意味着我的proxy_pass无法正常工作。

  • h ** ps://test.mydomain.com/admin1
  • h ** ps://test.mydomain.com/admin1/
  • h ** ps://test.mydomain.com/admin1/frtdef
  • h ** ps://test.mydomain.com/admin1/ts345hj
  • h ** ps://test.mydomain.com/admin2
  • h ** ps://test.mydomain.com/admin2/
  • h ** ps://test.mydomain.com/admin2/frtdef
  • h ** ps://test.mydomain.com/admin2/ts345hj

我的意图是,如果我在(B)中键入任何内容,则必须将其重定向到我的飞镖服务器。

示例:

  • h--ps://test.mydomain.com/admin1/frtdef

必须重定向为

  • h--p://127.0.0.1:3000 / admin1 / frtdef

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网址?

0 个答案:

没有答案