NGINX 服务器配置

Posted

技术标签:

【中文标题】NGINX 服务器配置【英文标题】:NGINX server configuration 【发布时间】:2017-05-12 03:30:53 【问题描述】:

我正在尝试配置 nginx 并在其中进行以下配置:

/etc/nginx/sites-enabled/默认

server 
    server_name firstproj.dev www.firstproj.dev;
    root /var/www/firstProj/web;

    location / 
        try_files $uri /app.php$is_args$args;
    

    location ~ ^/(app_dev|config)\.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;
    

    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/project_error.log;
    access_log /var/log/nginx/project_access.log;

其中 app.php 和 app_dev.php 都是 symfony 创建的 /var/www/firstProj/web/ 文件夹中的文件,无需进一步修改。

firstProj 是我目前正在从事的一个 symfony 项目,我在这里无法理解的是:

    为什么当我访问 www.firstproj.dev 时我得到了

    哎呀!发生错误服务器返回“500 内部服务器错误”。

    为什么当我访问 www.firstproj.dev/app_dev.php 时一切正常,我也可以访问我的路线(例如:www.firstproj.dev/app_dev.php/homepage 工作得非常好并返回预期来自我的控制器中的操作的响应)

    为什么当我访问 www.firstproj.dev/app.php 时出现 404 错误。

我希望它与没有 app_dev.php 的 www.firstproj.dev/homepage 一起工作,但我无法让它以这种方式工作。 此外,如果我访问

http://localhost

我明白了:

欢迎使用 nginx!

如果看到这个页面,说明nginx web服务器安装成功 和工作。需要进一步配置。

有关在线文档和支持,请参阅 nginx.org。 nginx.com 上提供商业支持。

感谢您使用 nginx。

如果这是一个相当愚蠢的问题,我深表歉意,但就服务器配置而言,我是初学者。

谢谢!

【问题讨论】:

在 etc/hosts 中添加 firstproj.dev 和 www.firstproj.dev 了吗? 是的!它们都在 /etc/hosts 文件中 【参考方案1】:

所以你发现你的app_dev.php 工作但app.php 不工作?

我过去曾发生过这种情况,有几件事值得检查。

    app_dev.php的内容复制到app.php,看看www.firstproj.dev/app.phpwww.firstproj.dev是否有效。如果它有效,那么您就知道这不是 NGINX 的问题,而是您的 Symfony 设置的问题。

    您是否为prod 或仅为dev 创建了cachelogs 目录? www-data 可以写吗?

    您是否检查过/var/log/nginx/project_error.log 以查看在尝试访问app.php 时是否出现任何错误?

    app.php 文件的顶部添加error_reporting(E_ALL); 行。现在,当您尝试访问生产版本时,您会看到任何错误吗?

    尝试清除缓存以进行生产。取决于您的服务器设置方式(您使用ACLCHOWN/CHMOD 作为缓存/日志文件吗?)您可以运行类似sudo su -u www-data php bin/console cache:clear --env prod

【讨论】:

1.如果我将 app_dev 的内容复制到 app 中,那么它可以工作 2. 它们都存在并且可由 www-data 写入 3. project_error.log 为空 4. 我做了但什么都没有出现!!! BAM 就是这样 5. 当我试图清除缓存时,我得到了这个错误:[Symfony\Component\Config\Exception\FileLoaderLoadException] 无法加载资源...所以我使用了一个第三方包,它只在 AppKernel 中注册开发模式。不在 prod 模式下,所以这就是问题所在。非常感谢!问题解决了:)

以上是关于NGINX 服务器配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx如何配置代理

nginx 怎么配置 ip

nginx前端常用配置

八、rancher搭建nginx配置

Nginx——nginx作为代理服务器(代理配置语法补充)

nginx虚拟主机配置