nginx server_name 正则匹配
测试服务器动态绑定多个域名
比如我现在有一个
api.domain.com
但是测试需要给不同分支代码绑定一个不同的域名方便访问
需求类似如下
api1.domain.com
api2.domain.com
api2.domain.com
可以像下面这样添加nginx配置
server {
listen 80;
server_name ~^api(?<which_domain_id>\d*)\.domain\.com$;
access_log logs/api.domain.com.access.log main;
error_log logs/api.domain.error.log;
}
server {
listen 443 ssl;
server_name ~^api(?<which_domain_id>\d*)\.domain\.com$;
access_log logs/api.domain.com.443.access.log main;
error_log logs/api.domain.443.error.log;
}
这样我们就可以拿到$which_domain_id
变量,为后面的测试提供用途
比如upstream的配置
比如root的配置
比如我们配置三个upsteam
upsteam api1 {
// ...
}
upsteam api2 {
// ...
}
upstream api3 {
// ...
}
在用location做转发的时候,可以像下面这样使用了
location = /api/xxx/info {
proxy_pass http://api$which_domain_id;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
keepalive_timeout 0;
}
不过你如果用到了proxy_redirect
的话,就不能proxy_redirect default
这样的配置了,可以改为类似下面的配置
location = /api/xxx/info {
proxy_pass http://api$which_domain_id;
proxy_redirect /api/xxx/info /api/xxx/info;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
keepalive_timeout 0;
}
像上面如果是转发到同一个路由的话其实也可以不用加proxy_redirect
的
location = /api/xxx/info {
proxy_pass http://api$which_domain_id;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
keepalive_timeout 0;
}
在配置root的时候可以参考下面
server {
listen 80;
server_name ~^api(?<which_domain_id>\d*)\.domain\.com$;
root /var/www/api.domain.com/$which_domain_id/public/;
index index.html index.htm index.php;
error_log logs/api.domain.access.log main;
error_log logs/api.domain.error.log;
client_max_body_size 3M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
最后声明这个which_domain_id
只是我这里的需要可以用作id操作,你可以改为字符串参数
文章参考:http://nginx.org/en/docs/http/server_names.html
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.gowhich.com ),版权所有,侵权必究。
版权声明
由 durban创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 Gowhich博客( https://www.gowhich.com ),版权所有,侵权必究。