2015-06-03 1 views
0

У меня есть cakephp, настроенный с nginx, и до того, как я установил nginx, и переписывание url работало отлично, так что URL-адреса формы: mywebsite.com/cake_project/controller/action отлично работали. Тогда я изменил имя папки cake_project в web, и обновленный файл конфигурации Nginx и теперь, когда я иду в mywebsite.com/web в CakePHP работает, но если я иду в mywebsite.com/web/controller или mywebsite.com/web/controller/action дает 404.nginx cakephp переписывает правила, внезапно вызывающие 404, он работал до

(Моя операционная система Ubuntu, и мой CakePHP версия 2.3.9)

Вот что мой текущий Nginx конфигурации, простите я не резервную мой старый Nginx конфигурации :((что, вероятно, был бы мне помог).

## 
# You should look at the following URL's in order to grasp a solid understanding 
# of Nginx configuration files in order to fully unleash the power of Nginx. 
# http://wiki.nginx.org/Pitfalls 
# http://wiki.nginx.org/QuickStart 
# http://wiki.nginx.org/Configuration 
# 
# Generally, you will want to move this file somewhere, and start with a clean 
# file but keep this around for reference. Or just disable in sites-enabled. 
# 
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. 
## 

server { 
    listen 80; 
    listen [::]:80; 

    server_name mywebsite.com; 

    return 301 https://$server_name$request_uri; 
} 

server { 
     listen 443 default_server; 
     listen [::]:443 default_server ipv6only=on; 

     root /usr/share/nginx/html; 
     index index.php index.html index.htm; 

     ssl on; 
     ssl_certificate path_to_ssl_certificate; 
     ssl_certificate_key path_to_ssl_key; 

     ssl_session_timeout 5m; 

     ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; 
     ssl_prefer_server_ciphers on; 

     # Make site accessible from http://localhost/ 
     server_name localhost; 

     add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; 

     location /web { 
      alias /usr/share/nginx/html/web/app/webroot; 
      try_files $uri $uri/ /web/webroot/index.php; 
     } 

     location/{ 
       # First attempt to serve request as file, then 
       # as directory, then fall back to displaying a 404. 
       try_files $uri $uri/ =404; 
       # Uncomment to enable naxsi on this location 
       # include /etc/nginx/naxsi.rules 
     } 

     error_page 404 /404.html; 
     error_page 500 502 503 504 /50x.html; 
     location = /50x.html { 
       root /usr/share/nginx/html; 
     } 

     location ~ \.php$ { 
       try_files $uri =404; 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
       fastcgi_pass unix:/var/run/php5-fpm.sock; 
       fastcgi_index index.php; 
       include fastcgi_params; 
     } 

     # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests 
     #location /RequestDenied { 
     #  proxy_pass http://127.0.0.1:8080; 
     #} 

     #error_page 404 /404.html; 

     # redirect server error pages to the static page /50x.html 
     # 
     #error_page 500 502 503 504 /50x.html; 
     #location = /50x.html { 
     #  root /usr/share/nginx/html; 
     #} 

     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
     # 
     location ~ \.php$ { 
       fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     #  # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 
     # 
     #  # With php5-cgi alone: 
     #  fastcgi_pass 127.0.0.1:9000; 
     #  # With php5-fpm: 
       fastcgi_pass unix:/var/run/php5-fpm.sock; 
       fastcgi_index index.php; 
       include fastcgi_params; 
     } 

     # deny access to .htaccess files, if Apache's document root 
     # concurs with nginx's one 
     # 
     #location ~ /\.ht { 
     #  deny all; 
     #} 
} 


# another virtual host using mix of IP-, name-, and port-based configuration 
# 
#server { 
#  listen 8000; 
#  listen somename:8080; 
#  server_name somename alias another.alias; 
#  root html; 
#  index index.html index.htm; 
# 
#  location/{ 
#    try_files $uri $uri/ =404; 
#  } 
#} 

Может ли кто-нибудь увидеть, что я делаю неправильно?

ответ

0

У меня есть аналогичные конфигурации Nginx на все, начиная с Nginx 1.4 - 1.8, похоже, хорошо работает с CakePHP, особенно для перезаписи. У вас есть вещи, которые используют IPv6? Я бы подумал, что все может пойти, если вы уверены, что ничего не использует IPv6.

Вот рабочий пример, который я работаю с несколькими проекта CakePHP 2.x:

server { 
    listen 80 default_server; 
    server_name www.example.com; 
    rewrite ^(.*) https://www.example.com$1 permanent; 
} 
server { 
    listen 443 ssl; 

    access_log /var/log/nginx/www.example.com.access.log; 
    error_log /var/log/nginx/www.example.com.error.log; 

    root /var/www/production/app/webroot; 
    index index.php; 

    server_name www.example.com; 

    ssl_certificate /etc/nginx/ssl.crt/www.example.com.intermediate.combined.crt; 
    ssl_certificate_key /etc/nginx/ssl.key/www.example.com.key; 

    # For Larger File Uploads 
    client_max_body_size 28M; 

    # This is for CakePHP 
    if (!-e $request_filename) { 
     rewrite ^/(.+)$ /index.php?url=$1 last; 
     break; 
    } 

    proxy_buffers 4 256k; 
    proxy_buffer_size 128k; 
    proxy_busy_buffers_size 256k; 

    # Cache Headers for Static Files 
    location ~* \.(?:ico|css|js|gif|jpe?g|png|swf)$ { 
     expires 30d; 
     add_header Pragma public; 
     add_header Cache-Control "public"; 
    } 

    # Pass the PHP scripts to FastCGI server 
    # listening on 127.0.0.1:9000 
    location ~ \.php$ { 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_pass_header Set-Cookie; 
     fastcgi_ignore_headers Cache-Control Expires; 
     fastcgi_intercept_errors on; # to support 404s for PHP files no$ 
     fastcgi_connect_timeout 300; 
     fastcgi_send_timeout 300; 
     fastcgi_read_timeout 300; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_buffers 4 256k; 
     fastcgi_buffer_size 128k; 
     fastcgi_busy_buffers_size 256k; 
     include fastcgi_params; 
     proxy_connect_timeout 300; 
     proxy_send_timeout 300; 
     proxy_read_timeout 300; 
     send_timeout 300; 
    } 

    # Deny access to .htaccess files, 
    # git & svn repositories, etc 
    location ~ /\.(ht|git|svn) { 
     deny all; 
    } 
} 

Вот еще один вариант, который может работать для вас:

server { 
    listen 80; 
    listen [::]:80; 
    server_name mywebsite.com; 
    return 301 https://$server_name$request_uri; 
} 

server { 
    listen 443 default_server; 
    listen [::]:443 default_server ipv6only=on; 

    root /usr/share/nginx/html; 
    index index.php index.html index.htm; 

    ssl on; 
    ssl_certificate path_to_ssl_certificate; 
    ssl_certificate_key path_to_ssl_key; 

    ssl_session_timeout 5m; 

    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; 
    ssl_prefer_server_ciphers on; 

    # Make site accessible from http://localhost/ 
    server_name localhost; 

    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; 

    location /web { 
     rewrite ^/web$ /web/ permanent; 
     rewrite ^/web/(.+)$ /$1 break; 
     root /usr/share/nginx/html/web/app/webroot; 
     try_files $uri /$uri/ @cakephp; 
    } 

    error_page 404 /404.html; 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 

    # Other PHP Files - Non-CakePHP 
    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     include fastcgi_params; 
    } 

    # For CakePHP 
    location @cakephp { 
     set $q $request_uri; 
     if ($request_uri ~ "^/web(.+)$") { 
      set $q $1; 
     } 
     fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/web/app/webroot/index.php; 
     fastcgi_param QUERY_STRING url=$q; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_intercept_errors on; # to support 404s for PHP files no$ 
     include fastcgi_params; 
    } 

} 
Смежные вопросы