- Внутренняя ошибка 500 Apache, но ничего в логах?
- 8 ответов
- 0.5 — Ошибка 500 на Apache 2.2.6 + Debian-Linux #797
- Comments
- dignityinside commented Apr 7, 2013
- yupe commented Apr 8, 2013
- UnQuaiz commented Apr 8, 2013
- dignityinside commented Apr 8, 2013
- UnQuaiz commented Apr 8, 2013
- dignityinside commented Apr 8, 2013
- Ошибка 500 internal server error Nginx
- Как исправить 500 internal server error Nginx
- 1. Ошибка в скрипте PHP
- 2. Превышено время выполнения или лимит памяти
- 3. Неверные права на файлы
- Выводы
- Internal Error 500 Apache, but nothing in the logs?
- 11 Answers 11
Внутренняя ошибка 500 Apache, но ничего в логах?
Я получаю 500 внутренних ошибок сервера, когда я пытаюсь сделать HTTP-сообщение на определенный адрес в моем приложении. Я просмотрел журналы сервера в пользовательском каталоге журналов, указанном в файле виртуальных хостов, но ошибка там не отображается, поэтому отладка это была боль в заднице.
Как заставить Apache регистрировать внутренние ошибки 500 в журнале ошибок?
8 ответов
журнал ошибок обычно имеет (более) конкретную ошибку. часто это будут Запрещенные разрешения или даже интерпретатор, который не может быть найден.
это означает, что вина почти всегда лежит на вашем скрипте. e.g вы загрузили скрипт perl, но не дали ему разрешения на выполнение? или, возможно, он был поврежден в среде linux, если вы напишете сценарий в windows, а затем загрузите его на сервер без преобразования окончаний строк, вы получите эту ошибку.
в perl если вы забыли
вы получите эту ошибку
есть много причин для этого. поэтому сначала проверьте журнал ошибок, а затем предоставьте дополнительную информацию.
журнал ошибок по умолчанию часто находится в /var/log/httpd/error_log или /var/log/apache2/error.log .
причина, по которой вы смотрите журналы ошибок по умолчанию (как указано выше), заключается в том, что ошибки не всегда публикуются в пользовательском журнале ошибок, как определено в виртуальном хосте.
предполагает linux и не обязательно на Perl
почему 500 внутренних ошибок сервера не регистрируются в ваших журналах ошибок apache?
ошибки, которые вызывают ошибку внутреннего сервера 500, поступают из модуля PHP. По умолчанию PHP не регистрирует эти ошибки. Причина в том, что вы хотите, чтобы веб-запросы шли как можно быстрее физически.
эти инструкции для включения регистрации ошибок внутреннего сервера предназначены для Ubuntu 12.10 С PHP 5.3.10 и Apache/2.2.22 .
убедитесь, что PHP ведение журнала включено:
найдите свой php.ini-файл:
отредактируйте этот файл как root:
найдите эту строку в php.ini:
изменить эту строку на это:
ниже в файле вы увидите это:
точки с запятой-это комментарии, это означает линии не действуют. Измените эти строки, чтобы они выглядели так:
что это связывает с PHP, так это то, что мы хотим зарегистрировать все эти ошибки. Предупреждение, будет большой удар по производительности, поэтому вы не хотите, чтобы это было включено на производстве, потому что ведение журнала требует работы, а работа требует времени, время стоит денег.
перезапуск PHP и Apache должны применить изменения.
сделайте то, что вы сделали, чтобы вызвать 500 Внутренняя ошибка сервера снова, и проверьте журнал:
вы должны увидеть ошибку 500, в конце концов, что-то вроде этого:
Я просто столкнулся с этим, и это было связано с неправильной конфигурацией mod_authnz_ldap в моем .файл htaccess. Абсолютно ничего не регистрировалось, но я продолжал получать ошибку 500.
Если вы столкнулись с этой конкретной проблемой, вы можете изменить уровень журнала mod_authnz_ldap следующим образом:
Это будет использовать уровень журнала отладки для mod_authnz_ldap, но предупреждать обо всем остальном (https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel).
Проверьте журнал ошибок php, который может быть отдельным файлом из вашего журнала ошибок apache.
найдите его, перейдя в phpinfo() и проверьте атрибут error_log. Если он не установлен. Установите его:https://stackoverflow.com/a/12835262/445131
возможно, ваш post_max_size слишком мал для того, что вы пытаетесь опубликовать, или один из других параметров max memory слишком низок.
Если Внутренняя Ошибка Сервера информация не отображается в файлах журнала, вам, вероятно, нужно перезапустите службу Apache.
Я обнаружил, что Apache 2.4 (по крайней мере, на платформе Windows) упорно отказывается очищать файлы журналов-вместо этого зарегистрированные данные остаются в памяти довольно долго. Это хорошая идея с точки зрения производительности, но она может быть запутанной при разработке.
убедитесь, что версия php, которую вы используете, соответствует вашей кодовой базе. Например, ваша локальная среда может работать под управлением php 5.4 (и все работает нормально), и, возможно, вы тестируете свой код на новой машине с установленным php 5.3. Если вы используете синтаксис 5.4, такой как [] для array (), вы получите ситуацию, описанную выше.
попробуйте получить доступ к статическому файлу. Если это не работает, то перейдите во все каталоги из корня » / «или» c:\ «в каталог вашего файла и проверьте, содержат ли они».реврайт» файлов.
Я однажды оставил файл в » c:\», и у него были самые странные результаты.
Источник
0.5 — Ошибка 500 на Apache 2.2.6 + Debian-Linux #797
Comments
dignityinside commented Apr 7, 2013
Закачал архив на сервер, распаковал в папку «public_html» выдает ошибку: Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация.
OS: Debian Linux 6.0
PHP: PHP 5.3.3-7+squeeze14 with Suhosin-Patch
Apache/2.2.16 (Debian)
Apache-Mods (enable): core mod_log_config mod_logio prefork http_core mod_so mod_actions mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_status mod_suexec mod_expires mod_headers
Понимаю что нужно править .htacess, он довольно большой и что именно не пойму.
The text was updated successfully, but these errors were encountered:
yupe commented Apr 8, 2013
Что говорит error.log апача ?
UnQuaiz commented Apr 8, 2013
Предвкушаю что mod_rewrite ругается на предел редиректов. Сам недавно столкнулся
Попробуй в .htaccess найти в конце строку:
dignityinside commented Apr 8, 2013
Проблема решена. Видимо при загрузки сбросились права на папки и файлы.
Помогло:
find /home/demo/public_html -type f -exec chmod 644 <> ;
find /home/demo/public_html -type d -exec chmod 755 <> ;
UnQuaiz commented Apr 8, 2013
У вас апач сконфигурен неправильно. Проверяйте httpd.conf
dignityinside commented Apr 8, 2013
Проблему решил, спасибо!
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Ошибка 500 internal server error Nginx
При разработке веб-сайтов и веб-приложений можно столкнуться с ошибкой 500 internal server error. Сначала она может испугать и ввести в заблуждение, поскольку обычно веб-сервер выдает более конкретные ошибки, в которых указана точная причина проблемы, например, превышено время ожидания, неверный запрос или файл не найден, а тут просто сказано что, обнаружена внутренняя ошибка.
Но не все так страшно и в большинстве случаев проблема вполне решаема и очень быстро. В этой статье мы разберем как исправить ошибку Internal server error в Nginx.
Как исправить 500 internal server error Nginx
Дословно Internal server error означает внутренняя ошибка сервера. И вызвать её могут несколько проблем. Вот основные из них:
- Ошибки в скрипте на PHP — одна из самых частых причин;
- Превышено время выполнения PHP скрипта или лимит памяти;
- Неправильные права на файлы сайта;
- Неверная конфигурация Nginx.
А теперь рассмотрим каждую из причин более подробно и разберем варианты решения.
1. Ошибка в скрипте PHP
Мы привыкли к тому, что если в PHP скрипте есть ошибки, то сразу же видим их в браузере. Однако на производственных серверах отображение сообщений об ошибках в PHP отключено, чтобы предотвратить распространение информации о конфигурации сервера для посторонних. Nginx не может отобразить реальную причину ошибки, потому что не знает что за ошибка произошла, а поэтому выдает универсальное сообщение 500 internal server error.
Чтобы исправить эту ошибку, нужно сначала понять где именно проблема. Вы можете включить отображение ошибок в конфигурационном файле php изменив значение строки display_errors с off на on. Рассмотрим на примере Ubuntu и PHP 7.2:
sudo systemctl restart php-fpm
Затем обновите страницу и вы увидите сообщение об ошибке, из-за которого возникла проблема. Далее его можно исправить и отключить отображение ошибок, тогда все будет работать. Ещё можно посмотреть сообщения об ошибках PHP в логе ошибок Nginx. Обычно он находится по пути /var/log/nginx/error.log, но для виртуальных доменов может настраиваться отдельно. Например, смотрим последние 100 строк в логе:
tail -n 100 -f /var/log/nginx/error.log
Теперь аналогично, исправьте ошибку и страница будет загружаться нормально, без ошибки 500.
2. Превышено время выполнения или лимит памяти
Это продолжение предыдущего пункта, так тоже относится к ошибкам PHP, но так, как проблема встречается довольно часто я решил вынести её в отдельный пункт. В файле php.ini установлены ограничения на время выполнения скрипта и количество оперативной памяти, которую он может потребить. Если скрипт потребляет больше, интерпретатор PHP его убивает и возвращает сообщение об ошибке.
Также подобная ошибка может возникать, если на сервере закончилась свободная оперативная память.
Если же отображение ошибок отключено, мы получаем error 500. Обратите внимание, что если время ожидания было ограничено в конфигурационном файле Nginx, то вы получите ошибку 504, а не HTTP ERROR 500, так что проблема именно в php.ini.
Чтобы решить проблему увеличьте значения параметров max_execution_time и memory_limit в php.ini:
sudo vi /etc/php/7.2/php.ini
max_execution_time 300
memory_limit 512M
Также проблема может быть вызвана превышением других лимитов установленных для скрипта php. Смотрите ошибки php, как описано в первом пункте. После внесения изменений в файл перезапустите php-fpm:
sudo systemctl restart php-fpm
3. Неверные права на файлы
Такая ошибка может возникать, если права на файлы, к которым обращается Nginx установлены на правильно. Сервисы Nginx и php-fpm должны быть запущены от имени одного и того же пользователя, а все файлы сайтов должны принадлежать этому же пользователю. Посмотреть от имени какого пользователя запущен Nginx можно командой:
nginx -T | grep user
Чтобы узнать от какого пользователя запущен php-fpm посмотрите содержимое конфигурационного файла используемого пула, например www.conf:
sudo vi /etc/php-fpm.d/www.conf
В моем случае это пользователь nginx. Теперь надо убедится, что файлы сайта, к которым вы пытаетесь обратиться принадлежат именно этому пользователю. Для этого используйте команду namei:
namei -l /var/www/site
Файлы сайта должны принадлежать пользователю, от имени которого запущены сервисы, а по пути к каталогу с файлами должен быть доступ на чтение для всех пользователей. Если файлы принадлежат не тому пользователю, то вы можете все очень просто исправить:
sudo chown nginx:nginx -R /var/www/site
Этой командой мы меняем владельца и группу всех файлов в папке на nginx:nginx. Добавить права на чтение для всех пользователей для каталога можно командой chmod. Например:
sudo chmod o+r /var/www/
Далее все должно работать. Также, проблемы с правами может вызывать SELinux. Настройте его правильно или отключите:
Выводы
В этой статье мы разобрали что делать если на вашем сайте встретилась ошибка 500 internal server error nginx. Как видите проблема вполне решаема и в большинстве случаев вам помогут действия описанные в статье. А если не помогут, напишите свое решение в комментариях!
Источник
Internal Error 500 Apache, but nothing in the logs?
I’m getting 500 Internal Server errors when I try to make an HTTP POST to a specific address in my app. I’ve looked into the server logs in the custom log directory specified in the virtual hosts file, but the error doesn’t show up there so debugging this has been a pain in the ass.
How do I cause Apache to log Internal 500 errors into the error log?
11 Answers 11
Why are the 500 Internal Server Errors not being logged into your apache error logs?
The errors that cause your 500 Internal Server Error are coming from a PHP module. By default, PHP does NOT log these errors. Reason being you want web requests go as fast as physically possible and it’s a security hazard to log errors to screen where attackers can observe them.
These instructions to enable Internal Server Error Logging are for Ubuntu 12.10 with PHP 5.3.10 and Apache/2.2.22 .
Make sure PHP logging is turned on:
Locate your php.ini file:
Edit that file as root:
Find this line in php.ini:
Change the above line to this:
Lower down in the file you’ll see this:
The semicolons are comments, that means the lines don’t take effect. Change those lines so they look like this:
What this communicates to PHP is that we want to log all these errors. Warning, there will be a large performance hit, so you don’t want this enabled on production because logging takes work and work takes time, time costs money.
Restarting PHP and Apache should apply the change.
Do what you did to cause the 500 Internal Server error again, and check the log:
You should see the 500 error at the end, something like this:
Check your php error log which might be a separate file from your apache error log.
Find it by going to phpinfo() and check for error_log attribute. If it is not set. Set it: https://stackoverflow.com/a/12835262/445131
Maybe your post_max_size is too small for what you’re trying to post, or one of the other max memory settings is too low.
I just ran into this and it was due to a mod_authnz_ldap misconfiguration in my .htaccess file. Absolutely nothing was being logged, but I kept getting a 500 error.
If you run into this particular issue, you can change the log level of mod_authnz_ldap like so:
That will use a log level of debug for mod_authnz_ldap but warn for everything else (https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel).
If your Internal Server Error information doesn’t show up in log files, you probably need to restart the Apache service.
I’ve found that Apache 2.4 (at least on Windows platform) tends to stubbornly refuse to flush log files—instead, logged data remains in memory for quite a while. It’s a good idea from the performance point of view but it can be confusing when developing.
The answers by @eric-leschinski is correct.
But there is another case if your Server API is FPM/FastCGI (Default on Centos 8 or you can check use phpinfo() function)
In this case:
- Run phpinfo() in a php file;
- Looking for Loaded Configuration File param to see where is config file for your PHP.
- Edit config file like @eric-leschinski ‘s answer.
Check Server API param. If your server only use apache handle API -> restart apache. If your server use php-fpm you must restart php-fpm service
Check the log file in php-fpm log folder. eg /var/log/php-fpm/www-error.log
Add HttpProtocolOptions Unsafe to your apache config file and restart the apache server. It shows the error details.
Please check if you are disable error reporting somewhere in your code.
There was a place in my code where I have disabled it, so I added the debug code after it:
In my case it was the ErrorLog directive in httpd.conf. Just accidently noticed it already after I gave up. Decided to share the discovery ) Now I know where to find the 500-errors.
Please Note: The original poster was not specifically asking about PHP. All the php centric answers make large assumptions not relevant to the actual question.
The default error log as opposed to the scripts error logs usually has the (more) specific error. often it will be permissions denied or even an interpreter that can’t be found.
This means the fault almost always lies with your script. e.g you uploaded a perl script but didnt give it execute permissions? or perhaps it was corrupted in a linux environment if you write the script in windows and then upload it to the server without the line endings being converted you will get this error.
in perl if you forget
you will get this error
There are many reasons for it. so please first check your error log and then provide some more information.
The default error log is often in /var/log/httpd/error_log or /var/log/apache2/error.log .
The reason you look at the default error logs (as indicated above) is because errors don’t always get posted into the custom error log as defined in the virtual host.
Источник