Laravel Octane+Nginx动态子域名配置方案咨询
解决Laravel Octane下动态子域名路由的Nginx配置问题
要让Nginx支持动态子域名并将正确的Host头传递给Octane,只需对现有配置做以下关键调整:
1. 配置泛域名匹配
首先在Nginx的server块中设置支持泛域名的server_name,确保所有子域名请求都能被正确捕获:
server { listen 80; listen [::]:80; # 匹配所有子域名和主域名 server_name *.mywebsite.com mywebsite.com; root /path/to/your/laravel/project/public; index index.php;
2. 保留Host头传递(核心)
Laravel的动态子域名路由依赖完整的Host请求头来解析{slug}参数,所以必须确保Nginx将原始请求的Host头完整传递给Octane——你的现有配置中已经包含proxy_set_header Host $http_host;,不要移除这一行,这是让路由正常工作的关键。
3. 完整的Nginx配置示例
整合后的完整配置如下:
server { listen 80; listen [::]:80; server_name *.mywebsite.com mywebsite.com; root /path/to/your/laravel/public; index index.php; # 静态文件直接返回,减轻Octane负载 location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; try_files $uri @octane; } location /index.php { try_files /not_exists @octane; } location / { try_files $uri $uri/ @octane; } location @octane { set $suffix ""; if ($uri = /index.php) { set $suffix ?$query_string; } proxy_http_version 1.1; proxy_set_header Host $http_host; # 必须保留,传递完整Host头 proxy_set_header Scheme $scheme; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # 对应Octane配置中的监听地址(如Swoole默认是127.0.0.1:8000) proxy_pass http://127.0.0.1:8000$suffix; } }
额外注意事项
- DNS泛域名解析:确保你的域名服务商配置了
*.mywebsite.com的A记录,指向你的服务器IP。 - HTTPS配置:如果使用HTTPS,需要部署通配符SSL证书,并在
server块中添加listen 443 ssl;及证书相关配置。 - Octane监听地址:检查
config/octane.php中的server配置,确保proxy_pass的地址和Octane实际监听的地址/端口一致。
内容的提问来源于stack exchange,提问作者William Martins
相关产品推荐
相关产品推荐

