2017-05-19 9 views
0

私は、サーバにインストールして設定する予定のプロジェクトに合格しました。私はnginx w/php7とsymfonyフレームワークを使用しています。問題は、そのサーバにphp-cgi -b 127.0.0.1:9000nginxというフォルダを実行すると、サーバからアクセスできなくなり、404エラーが発生するということです。パスを正しく入力すればinfo.phpにアクセスできます。コンソールからサーバーを実行して、コマンドphp bin/concole server:run 0.0.0.0:8000 --env=prodを実行した場合、サーバーはうまく動作し、私は設定を変更しません。ここでコンソールなしで実行したときにsymfonyプロジェクトが動作しない

は私nginx.confファイルです:

#user nobody; 
worker_processes 1; 

#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 

#pid  logs/nginx.pid; 


events { 
worker_connections 1024; 
} 


http { 
include  mime.types; 
default_type application/octet-stream; 

#log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
#     '$status $body_bytes_sent "$http_referer" ' 
#     '"$http_user_agent" "$http_x_forwarded_for"'; 

#access_log logs/access.log main; 

sendfile  on; 
#tcp_nopush  on; 

#keepalive_timeout 0; 
keepalive_timeout 65; 

#gzip on; 

server { 
    listen  8000; 
    server_name localhost; 

    #charset koi8-r; 

    #access_log logs/host.access.log main; 

    location/{ 
     root html/web; 
     index app.php index.htm index.html; 
    } 

    #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 html/web; 
    } 

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
    # 
    #location ~ \.php$ { 
    # proxy_pass http://127.0.0.1; 
    #} 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
    # 
    location ~ \.php$ { 
     root   html/web; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index app.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     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; 

# location/{ 
#  root html; 
#  index index.html index.htm; 
# } 
#} 


# HTTPS server 
# 
#server { 
# listen  443 ssl; 
# server_name localhost; 

# ssl_certificate  cert.pem; 
# ssl_certificate_key cert.key; 

# ssl_session_cache shared:SSL:1m; 
# ssl_session_timeout 5m; 

# ssl_ciphers HIGH:!aNULL:!MD5; 
# ssl_prefer_server_ciphers on; 

# location/{ 
#  root html; 
#  index index.html index.htm; 
# } 
#} 

} 

プロジェクトで私に送られた.htaccessファイルがありましたが、これはnginxのである、と私はそれで経験がないことから、私は知りませんそれを変換する方法。この仕事をするために必要な情報は何ですか?そして私はそれをどのように正確に機能させるのですか?私は、特に私が生産モードで実行していることをコンソールから明示したくありません。しかし、私が述べていないと、アプリケーションは常にdevモードで動作します。

app.php

<?php 

use Symfony\Component\HttpFoundation\Request; 

/** @var \Composer\Autoload\ClassLoader $loader */ 
$loader = require __DIR__.'/../app/autoload.php'; 
include_once __DIR__.'/../var/bootstrap.php.cache'; 

$kernel = new AppKernel('prod', false); 
$kernel->loadClassCache(); 
//$kernel = new AppCache($kernel); 

// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter 
//Request::enableHttpMethodParameterOverride(); 
$request = Request::createFromGlobals(); 
Request::setTrustedProxies(array('127.0.0.1', $request->server->get('REMOTE_ADDR'))); 
$response = $kernel->handle($request); 
$response->send(); 
$kernel->terminate($request, $response); 

app_dev.php

<?php 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Debug\Debug; 

// If you don't want to setup permissions the proper way, just uncomment the following PHP line 
// read http://symfony.com/doc/current/book/installation.html#checking-symfony-application-configuration-and-setup 
// for more information 
//umask(0000); 

// This check prevents access to debug front controllers that are deployed by accident to production servers. 
// Feel free to remove this, extend it, or make something more sophisticated. 
if (isset($_SERVER['HTTP_CLIENT_IP']) 
|| isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
|| !(in_array(@$_SERVER['REMOTE_ADDR'], ['127.0.0.1', '::1']) || php_sapi_name() === 'cli-server') 
) { 
header('HTTP/1.0 403 Forbidden'); 
exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 
} 

/** @var \Composer\Autoload\ClassLoader $loader */ 
$loader = require __DIR__.'/../app/autoload.php'; 
Debug::enable(); 

$kernel = new AppKernel('dev', true); 
$kernel->loadClassCache(); 
$request = Request::createFromGlobals(); 
$response = $kernel->handle($request); 
$response->send(); 
$kernel->terminate($request, $response); 

答えて

0

チェックnginx for symfonyと、例えばIP

ことにより、任意の制限のためにあなたのapp.phpとapp_dev.phpを確認するここにありますデフォルトapp_dev.php制限

// This check prevents access to debug front controllers that are deployed by accident to production servers. 
// Feel free to remove this, extend it, or make something more sophisticated. 
if (isset($_SERVER['HTTP_CLIENT_IP']) 
    || isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
    || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server') 
) { 
    header('HTTP/1.0 403 Forbidden'); 
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); 
} 

あなたの設定に応じてsymfonyが異なるsystemtで動作するようにするには、これらのコードブロックを変更またはコメントアウトする必要があります。

+0

ファイルを含めるように質問を編集しました。 nginxの設定を自分のファイルにコピー/ペーストすれば、それはうまくいくはずですか?私はPHPとnginxの部分を除いて、アプリケーションの多くを変更したくはありません。残りはおそらく適切に設定されているからです。 bin/consoleからサーバーを実行すると、同じネットワーク上の別のコンピューター上のアプリケーションにアクセスできますが、php-cgiとnginxを実行した場合は表示されません。 – EInherjar

関連する問題