Symfony 3:带有子域的路由不适用于产品
Symfony 3 : Routing with subdomain don't work on prod
这将使我花 6 个小时来解决这个问题,我有一个具有主机要求的路由来处理子域。它在 dev 中完美运行,但在 staging 中,无论我做什么,它都会重复同样的错误:
No route found for "GET /login"" at /var/www/app/var/cache/prod/classes.php
这是我的路线:
app_front_office:
resource: "@AppFrontOfficeBundle/Resources/config/routing.yml"
prefix: /
host: "%front_office_domain%"
app_back_office:
resource: "@AppBackOfficeBundle/Resources/config/routing.yml"
prefix: /
host: "%back_office_domain%"
security.yml :
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: true
form_login:
login_path: app_back_office_security_login
check_path: app_back_office_security_login
logout:
path: app_back_office_security_logout
target: app_back_office_dashboard_index
remember_me:
secret: '%secret%'
lifetime: 2630000
path: app_back_office_dashboard_index
always_remember_me: true
domain: '%cookie_domain%'
user_provider: main_provider
access_control:
- { host: '%back_office_domain%',path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { host: '%back_office_domain%',path: ^/, role: ROLE_ADMIN }
parameters.yml :
cookie_domain: .domain.com
front_office_domain: staging.domain.com
back_office_domain: bo-staging.domain.com
调试:路由器:
app_front_office_homepage ANY ANY staging.domain.com /
fos_js_routing_js ANY ANY ANY /js/routing.{_format}
app_back_office_dashboard_index GET ANY bo-staging.domain.com /
app_back_office_security_login GET|POST ANY bo-staging.domain.com /login
app_back_office_security_logout ANY ANY bo-staging.domain.com /logout
app_back_office_subscription_plan_list_ajax GET ANY bo-staging.domain.com /subscriptions/list
app_back_office_user_index GET ANY bo-staging.domain.com /users
app_back_office_user_profile GET ANY bo-staging.domain.com /users/profile/{userId}
app_back_office_user_update_field_ajax POST ANY bo-staging.domain.com /users/updateField
app_back_office_user_delete_ajax DELETE ANY bo-staging.domain.com /users/delete/{userId}
app_back_office_user_recover_ajax POST ANY bo-staging.domain.com /users/recover/{userId}
app_back_office_user_list_ajax GET ANY bo-staging.domain.com /users/list
nginx 配置文件:
server {
listen 443 default_server ssl;
server_name staging.domain.com api-staging.domain.com dashboard-staging.domain.com bo-staging.domain.com;
root /var/www/wapp/web;
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/domain_com.key;
# ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
try_files $uri /app.php$is_args$args;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/app_error.log;
access_log /var/log/nginx/app_access.log;
}
# HTTP server
server {
listen 80;
server_name staging.domain.com api-staging.domain.com dashboard-staging.domain.com bo-staging.domain.com;
root /var/www/app/web;
location / {
return 301 https://$server_name$request_uri;
}
}
谢谢你的帮助,如果我不能解决问题,我会发疯的:p
谢谢大家的帮助,我找到答案了。负载平衡器运行状况检查程序配置为检查“/login”路径,但我不知道此配置,因此无法解释错误。
这将使我花 6 个小时来解决这个问题,我有一个具有主机要求的路由来处理子域。它在 dev 中完美运行,但在 staging 中,无论我做什么,它都会重复同样的错误:
No route found for "GET /login"" at /var/www/app/var/cache/prod/classes.php
这是我的路线:
app_front_office:
resource: "@AppFrontOfficeBundle/Resources/config/routing.yml"
prefix: /
host: "%front_office_domain%"
app_back_office:
resource: "@AppBackOfficeBundle/Resources/config/routing.yml"
prefix: /
host: "%back_office_domain%"
security.yml :
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: true
form_login:
login_path: app_back_office_security_login
check_path: app_back_office_security_login
logout:
path: app_back_office_security_logout
target: app_back_office_dashboard_index
remember_me:
secret: '%secret%'
lifetime: 2630000
path: app_back_office_dashboard_index
always_remember_me: true
domain: '%cookie_domain%'
user_provider: main_provider
access_control:
- { host: '%back_office_domain%',path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { host: '%back_office_domain%',path: ^/, role: ROLE_ADMIN }
parameters.yml :
cookie_domain: .domain.com
front_office_domain: staging.domain.com
back_office_domain: bo-staging.domain.com
调试:路由器:
app_front_office_homepage ANY ANY staging.domain.com /
fos_js_routing_js ANY ANY ANY /js/routing.{_format}
app_back_office_dashboard_index GET ANY bo-staging.domain.com /
app_back_office_security_login GET|POST ANY bo-staging.domain.com /login
app_back_office_security_logout ANY ANY bo-staging.domain.com /logout
app_back_office_subscription_plan_list_ajax GET ANY bo-staging.domain.com /subscriptions/list
app_back_office_user_index GET ANY bo-staging.domain.com /users
app_back_office_user_profile GET ANY bo-staging.domain.com /users/profile/{userId}
app_back_office_user_update_field_ajax POST ANY bo-staging.domain.com /users/updateField
app_back_office_user_delete_ajax DELETE ANY bo-staging.domain.com /users/delete/{userId}
app_back_office_user_recover_ajax POST ANY bo-staging.domain.com /users/recover/{userId}
app_back_office_user_list_ajax GET ANY bo-staging.domain.com /users/list
nginx 配置文件:
server {
listen 443 default_server ssl;
server_name staging.domain.com api-staging.domain.com dashboard-staging.domain.com bo-staging.domain.com;
root /var/www/wapp/web;
ssl on;
ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/domain_com.key;
# ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
try_files $uri /app.php$is_args$args;
}
# PROD
location ~ ^/app\.php(/|$) {
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location ~ \.php$ {
return 404;
}
error_log /var/log/nginx/app_error.log;
access_log /var/log/nginx/app_access.log;
}
# HTTP server
server {
listen 80;
server_name staging.domain.com api-staging.domain.com dashboard-staging.domain.com bo-staging.domain.com;
root /var/www/app/web;
location / {
return 301 https://$server_name$request_uri;
}
}
谢谢你的帮助,如果我不能解决问题,我会发疯的:p
谢谢大家的帮助,我找到答案了。负载平衡器运行状况检查程序配置为检查“/login”路径,但我不知道此配置,因此无法解释错误。