nginx and host redirect / mysql



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

我已经像这样配置了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;
}
}

重写.map是这样的:

domain-from.tld domain-to.tld;
domain-from2.tld domain-to.tld/site;

我做了这种配置。

日志上的每个站点加载都会有条目,但它给出了无效的响应。

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;
}

我可能会做错什么?

最新更新