Symfony 3 and nginx



我有一个SF3应用程序,它在apache2上运行良好,但当我使用nginx时http://localhost/SF3-REST-USER-JWT/web/app_dev.php运行也可以很好地生成起始页。当我试图获得任何其他路由时,比如/api nginx给我404。以我的配置,nginx似乎根本不喜欢漂亮的路线。它查找/api目录

2017/04/24 21:51:42[错误]23683#23683:*2 open()"/var/www/html/SF3-REST-USER-JWT/web/app_dev.php/api"失败(20:不是目录),客户端:127.0.0.1,服务器:_,请求:"GET/SF3-REST-USER-JWT/web/app/dev.php/api HTTP/1.1",主机:"localhost">

为什么?我该怎么办?

listen 80 default_server;listen[::]:80 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name _;

location ~ ^/(app_dev|config).php(/|$) {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+.php)(/.*)$;
include fastcgi_params;
# When you are using symlinks to link the document root to the
# current version of your application, you should pass the real
# application path instead of the path to the symlink to PHP
# FPM.
# Otherwise, PHP's OPcache may not properly detect changes to
# your PHP files (see https://github.com/zendtech/ZendOptimizerPlus
# for more information).
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}

nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json                            application/javascript text/xml application/xml application/xml+rss      text/javascript;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

正如您在Symfony的文档中看到的,root应该指向web目录。

我想,/var/www/html是您的整个localhost服务器根,您可能无法更改它,因为您有其他项目,您可能会失去对它们的访问权限。

在不更改此root值的情况下,您有两个选项。

第一个是修复location部分,而不是:

location~^/(app_dev|config).php(/|$){

应该是这样的:

location ~ ^/{path_relative_to_root}/(app_dev|config).php(/|$) {

根据您尝试urlhttp://localhost/SF3-REST-USER-JWT/web/app_dev.php的信息,此路径可能是/SF3-REST-USER-JWT/web/,因此应该是:

location ~ ^/SF3-REST-USER-JWT/web/(app_dev|config).php(/|$) {

其次是为该项目创建单独的虚拟主机,这样它就可以拥有完全独立的域(例如symfonyapp.local或任何其他域)。

要做到这一点,您应该在/etc/nginx/sites-available/中创建单独的配置文件,其内容类似于示例表单Symfony的文档中显示的内容。只需要更改根路径和域名。当然,您需要通过在sites_enabled中创建一个符号链接来启用这个nginx站点。

然后,您还需要将此域添加到操作系统中的hosts文件中。

在这种情况下,您将能够使用简单的http://symfonyapp.local/app_dev.php访问您的网站。

Symfony doc gives us  fastcgi_pass unix:/var/run/php5-fpm.sock

但在Ubuntu 16.04中,它应该是fastcgi_pass-unix:/run/php/php5-fpm.sock。这就是我的问题。

最新更新