nginx和主机重定向/ mysql

问题描述 投票:0回答:1

是否可以从数据库读取重定向主机?

我已经像这样配置了nginx,但是它从文本文件读取。

map $http_host $host_to_send_to {
include /root/rewrite.map;
}

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.html index.htm index.nginx-debian.html;

server_name _;

location / {
# try_files $uri $uri/ =404;
# return 301 $scheme://$host_to_send_to$request_uri$is_args$query_string;
return 307 $scheme://$host_to_send_to$request_uri$is_args$query_string;

}
}

并且那个rewrite.map就像这样:

domain-from.tld domain-to.tld;
domain-from2.tld domain-to.tld/site;
nginx nginx-config
1个回答
0
投票

我做了这种配置。

在日志上的每个站点负载上都会有一个条目,但给出的响应无效。

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        set $httphost $http_host;
        set $httpto "";

        rewrite_by_lua '

        -- Make sure http host is defined
        if not ngx.var.httphost then
                ngx.log(ngx.ERR, "Error - no http host defined")
                return
        end

        -- begin mysql

        local mysql = require "resty.mysql"
        local db, err = mysql:new()

        db.set_timeout(1000) -- 1 sec

        local ok, err, errno, sqlstate = db:connect
        {
                host: "127.0.0.1",
                port: 3306,
                database: "hosts",
                user: "user",
                password: "password",
                max_packet_size = 1024 * 1024
        }

        if not ok then
                ngx.log(ngx.ERR, "MySQL failed to connect: ", err, " : " , errno, " ", sqlstate)                                                                                                                                                             return
        end

        -- prevent injection attack
        local hname = ngx.unescape_uri(client);
        local quoted_name = ngx.quote_sql_str(hname);

        local sql = "select to_address from redirect_hosts WHERE from_address =" .. quoted_name
        result,err,errno,sqlstate = db:query(sql,1)

        if not result then
                ngx.log(ngx.ERR, "Mysql bad result: ", err, ": ", errno, ": ",sqlstate, ".")
                return
        end

        if not result[1].to_address then
                ngx.log(ngx.ERR, "MySQL Error - no to_address for host was returned")
                return
        end

        ngx.var.httpto = result[1].to_address


        ';

        return 307 $scheme://$httpto$request_uri$is_args$query_string;

}

我可能会做错什么?

© www.soinside.com 2019 - 2024. All rights reserved.