【发布时间】:2018-02-14 23:23:20
【问题描述】:
我正在构建一个站点构建器,其中用户有一个子域username.myapp.com,使用通配符子域来服务他们的网站(这可行)。
我想允许用户使用他们自己的域名,所以我设置了dns.myapp.com,它指向服务器IP地址。
在我的域名提供商中,我添加了 www.customdomain.com CNAME 以映射到 dns.myapp.com
看起来www.customdomain.com 指向服务器,但它没有访问 Laravel 路由,我得到 Nginx 404 错误页面。
我已经构建了一个测试方法,只是为了显示完整的域路径并检查它的解析;
RouteServiceProvider:
public function boot()
{
\Route::pattern('domain', '[a-z0-9.\-]+');
parent::boot();
}
路由/web.php
Route::group(['domain' => '{domain}'], function() {
Route::get('/', 'PageController@domain');
});
控制器/PageController.php
public function domain($domain)
{
return $domain;
}
我可以输入anything.myapp.com,它会返回那个路径。我正在尝试让www.customdomain.com 做同样的事情。
这可能没有什么区别,但 myapp.com 在 AWS Route 53 中映射到通过 Laravel Forge 实现的 EC2 服务器。
编辑:Nginx 配置:
# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/myapp.com/before/*;
server {
listen 80;
listen [::]:80;
server_name .myapp.com;
root /home/forge/myapp.com/public;
# FORGE SSL (DO NOT REMOVE!)
# ssl_certificate;
# ssl_certificate_key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/dhparams.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php
charset utf-8;
# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/myapp.com/server/*;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log off;
error_log /var/log/nginx/myapp.com-error.log error;
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# FORGE CONFIG (DOT NOT REMOVE!)
include forge-conf/myapp.com/after/*;
【问题讨论】:
-
尝试添加“server_name _”是否解决了问题?
-
我现在就试试。那么只需在第二个下划线后添加“server_name _”和一个空格?
-
我是新手。我需要添加一个冒号吗?最后呢?
-
您的配置中还有其他
server块吗?这个server块不会处理所有域的唯一方法是,如果您有另一个server块作为默认服务器。 -
好的,添加行“server_name ~.;” - 这是一种 hack,但必须有效。
标签: php laravel nginx dns routing