Curl to HTTPS перестанет работать с Nginx + php-fpm
Просто была та же самая странная проблема. Случилось у меня на OS X 10.10.x, Apache 2.2.x и PHP 5.6. Ничего полезного в журналах ошибок.
2 ответа
Быстрый ответ: просто попробуйте удалить и установить php.
К сожалению, это на русском языке. Объяснение/перевод его: вам необходимо:
Я использовал Mac и следующие команды:
- launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php54.plist
- brew удалить php54
- brew установить —without-apache —with-fpm —with-mysql php54
- launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php54.plist
Я не могу отблагодарить вас за то, что вы спасли меня, что, должно быть, было еще около 8 часов, чтобы биться головой об стену.
У меня была та же проблема в macOS. Для меня обновление службы brew устранило проблему.
brew update brew upgrade --cleanup
Возможно, была некоторая несогласованность между расширениями. После обновления все работает правильно.
Ещё вопросы
- 1 FusionCharts не рендерится в Google Chrome и Firefox
- 0 JSON @attributes Использование ионных или AngularJS
- 0 Читать XML с ООП PHP
- 1 Сравнение массивов для проверки последовательности
- 0 не удается установить Dlib на Windows 10
- 0 Поместить ошибку проверки Jquery в поле ?
- 1 Предложения по оптимизации этого Java-кода с помощью математических функций
- 0 2D массив не заполняется правильно или . C ++
- 1 Печать звездочки на основе массива Int
- 0 Javascript не может разобрать строку JSON
- 0 При нажатии на миниатюру изображение должно отображаться в отдельном разделе.
- 1 Использование mpi4py для распараллеливания цикла for в вычислительном кластере
- 3 Рассчитать остаточное отклонение от модели логистической регрессии scikit-learn
- 1 Как получить заявки для текущего пользователя в SharePoint 2013
- 1 Это отношения многие ко многим?
- 0 Массив ошибок используется как инициализатор, и я не знаю ошибку
- 1 c # получить локальный путь .xsd из значения атрибута xsi: schemaLocation
- 1 Как передать аргумент функции в привязке данных?
- 1 Как перебрать списки из pandas dataframe в функции
- 0 Mysql запрос оптимизации или сократить запрос
- 1 Похоже, что пользовательский класс ConstraintLayout не может выкладывать вещи горизонтально — Android — Kotlin
- 1 Сделать близлежащие пиксели белыми opencv
- 0 php: невозможно выполнить итерацию для каждого цикла
- 0 Должен ли я избегать перенаправления в классах реализации при переносе API
- 0 установка div со скрытым атрибутом данных с помощью jquery
- 0 Как выполнить функцию PHP crypt в Nodejs
- 1 Crypto JS: TripleDES неправильно шифрует
- 0 как отправить JSON также из PHP API
- 0 Почему я получаю это ^ @, когда я пытаюсь получить доступ к первому элементу члена структуры данных CvMat
- 1 Создание дочерних записей с родительской моделью и возврат вложенных в ответ
- 0 Разрешить регулярное выражение с обратной косой чертой
- 1 Tomcat Виртуальный хост и Wildcard DNS соответствия
- 0 Создание поиска в php — набор текста в городе и получение достопримечательностей для этого города, перечисленных ниже
- 0 JQuery добавить / удалить классы по ширине окна
- 1 Хранение и доступ к данным в py-файле
- 1 OpenGL ES 2.0 Android — ошибка вращения куба
- 0 getElementsByName какое имя?
- 1 Не удается получить информацию XML в Java
- 1 Не удается прочитать свойство Symbol (Symbol.iterator) из неопределенного
- 1 Как проверить в JavaScript, если объект находится в массиве с несколькими объектами?
- 0 Удалить дублирование на основе информации одного столбца
- 1 Поиск нежелательных значений в панде
- 0 Доступ к области действия из другой директивы
- 0 Переменная PHP MYSQL возвращает ошибку
- 0 Как передать вектор объектов в другой класс, а затем вызвать функцию внутри члена объекта в этом векторе?
- 0 Изменить стиль списка при помощи JavaScript
- 0 добавить числовой индекс в таблицу MySQL
- 1 Оптимизация Pandas — Как работать с данными временных рядов Pandas в двух столбцах и получать почасовые данные между столбцами
- 1 Имеет ли название «взаимосвязанный» какое-то конкретное значение?
- 0 Документ, созданный с помощью PHP, не показывает предварительный просмотр в OSX
Настройка Nginx + PHP-FPM и HTTPS от Let’s Encrypt на AWS EC2 с Ubuntu Server 16.04 LTS
Порядок действий для установки PHP 7.1 и разворачивания проекта на PHP на созданном Amazon AWS EC2 instance. Основано на этой статье, с дополнениями отсюда и из других источников. Используется более новая версия PHP, добавлены инструкции по установке HTTPS, и пример настройки проекта на Laravel. Подразумевается, что инстанс используется в режиме разработки.
Сначала приведу код полностью. Это не bash-скрипт, а просто список команд, команды выполняются вручную по отдельности, при необходимости вводятся нужные данные.
# Instructions how to setup new AWS EC2 instance with Ubuntu Server 16.04 LTS and install PHP Laravel project and HTTPS # This is not a bash script, you have to run and control all commands manually sudo apt-get install nginx mysql-server sudo mysql_secure_installation sudo add-apt-repository ppa:ondrej/php && sudo apt-get update sudo apt-get install php7.1 php7.1-cli php7.1-common php7.1-mysql php7.1-fpm php7.1-curl php7.1-gd php7.1-bz2 php7.1-mcrypt php7.1-json php7.1-tidy php7.1-mbstring php-redis php-memcached php7.1-zip php7.1-dom php7.1-gmp # run after installation to create config directory from current user sudo apt-get install mc mc sudo mcedit /etc/php/7.1/fpm/php.ini # cgi.fix_pathinfo=0 sudo systemctl restart php7.1-fpm sudo mcedit /etc/nginx/sites-available/default server < listen 80 default_server; listen [::]:80 default_server; root /var/www/html; #! index index.php index.html index.htm index.nginx-debian.html; server_name _; #! location / < try_files $uri $uri/ /index.php?$query_string; >#! location ~ \.php$ < include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; >#! location ~ /\.ht < deny all; >> sudo nginx -t sudo systemctl reload nginx echo " /dev/null # check http://11.22.33.44/info.php sudo rm /var/www/html/info.php sudo chown -R "$USER":www-data /var/www/ sudo find /var/www/ -type f -exec chmod 660 <> \; && sudo find /var/www/ -type d -exec chmod 2770 <> \; sudo usermod -a -G www-data ubuntu # https sudo apt-get install software-properties-common && sudo add-apt-repository ppa:certbot/certbot && sudo apt-get update && sudo apt-get install python-certbot-nginx sudo mcedit /etc/nginx/sites-available/default # server_name my.domain.name; sudo systemctl reload nginx sudo certbot --nginx echo -e '#!/bin/sh\n\ncertbot renew\n' | sudo tee /etc/cron.daily/certbot-renew > /dev/null sudo chmod 0755 /etc/cron.daily/certbot-renew sudo certbot renew --dry-run
sudo apt-get install git curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer cd /var && rm -rf www/html # set repository URL here git clone . www cd www git checkout dev ln -s public html composer install sudo chgrp -R www-data storage bootstrap/cache sudo chmod -R ug+rwx storage bootstrap/cache sudo chmod -R 0777 storage/framework/cache cp .env.example .env && php artisan key:generate # set values in .env file - APP_NAME, DB_DATABASE, and other
Настройка системы
sudo apt-get install nginx mysql-server sudo mysql_secure_installation
mysql_secure_installation задает несколько вопросов по настройке.
Would you like to setup VALIDATE PASSWORD plugin? n Change the password for root? n Remove anonymous users? y Disallow root login remotely? y Remove test database and access to it? y Reload privilege tables now? y
Если у вас будет один пользователь, с которым проект будет подключаться к базе, то есть постоянное создание пользователей не предусматривается, то плагин валидации паролей можно отключить.
Удаленный логин лучше для всех пользователей отключать, для подключения со своего компьютера можно сделать проброс портов через SSH.
sudo add-apt-repository ppa:ondrej/php && sudo apt-get update sudo apt-get install php7.1 php7.1-cli php7.1-common php7.1-mysql php7.1-fpm php7.1-curl php7.1-gd php7.1-bz2 php7.1-mcrypt php7.1-json php7.1-tidy php7.1-mbstring php-redis php-memcached php7.1-zip php7.1-dom php7.1-gmp
PHP 7.1 и 7.2 пока нет в стандартных репозиториях.
sudo apt-get install mc mc
Устанавливать необязательно, если вам больше нравится другой редактор и способ передвижения по файловой системе.
Не стоит после установки запускать в первый раз через sudo mc , так как файлы конфигурации создадутся от пользователя root, и при запуске от обычного пользователя будет ошибка доступа.
sudo mcedit /etc/php/7.1/fpm/php.ini # cgi.fix_pathinfo=0 sudo systemctl restart php7.1-fpm
Найти настройку cgi.fix_pathinfo , раскомментировать и поставить 0. Это закрытие уязвимости, подробнее можно почитать здесь.
sudo mcedit /etc/nginx/sites-available/default server < listen 80 default_server; listen [::]:80 default_server; root /var/www/html; #! index index.php index.html index.htm index.nginx-debian.html; server_name _; #! location / < try_files $uri $uri/ /index.php?$query_string; >#! location ~ \.php$ < include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.1-fpm.sock; >#! location ~ /\.ht < deny all; >>
Восклицательными знаками отмечены места, где надо поменять.
— index — добавить index.php
— try_files — убрать =404 , добавить /index.php?$query_string
— location ~ \.php$ — раскомментировать секцию, поменять название файла с сокетом
— location ~ /\.ht — раскомментировать секцию для файлов *.htaccess
sudo nginx -t sudo systemctl reload nginx
Проверить правильность конфигурации, если все нормально, перезагрузить ее.
echo " /dev/null # check http://11.22.33.44/info.php sudo rm /var/www/html/info.php
Создать тестовый файл, проверить работу PHP, потом удалить. Выполнять необязательно. 11.22.33.44 обозначает IP-адрес инстанса.
sudo chown -R "$USER":www-data /var/www/ sudo find /var/www/ -type f -exec chmod 660 <> \; && sudo find /var/www/ -type d -exec chmod 2770 <> \; sudo usermod -a -G www-data ubuntu
Сейчас в веб-каталоге все создано от рута, надо изменить на обычного пользователя. Nginx запускает PHP от пользователя www-data из группы www-data , SSH подключается с пользователем ubuntu . Надо добавить ubuntu в эту группу, иначе могут быть проблемы с доступом. Например, когда какая-то консольная команда создает папку, куда будет идти запись и при открытии сайта через веб.
Настройка HTTPS
Настройка HTTPS часто делается после настройки проекта, когда он уже есть и работает по HTTP. Но действия общие, от проекта не зависят, поэтому рассмотрим ее раньше.
Используются бесплатные сертификаты от Let’s Encrypt.
sudo apt-get install software-properties-common && sudo add-apt-repository ppa:certbot/certbot && sudo apt-get update && sudo apt-get install python-certbot-nginx
Устанавливаем certbot, он обеспечивает настройку и обновление сертификатов.
sudo mcedit /etc/nginx/sites-available/default # server_name my.domain.name; sudo systemctl reload nginx
Прописываем доменное имя. Оно уже должно быть доступно и указывать на IP сервера. Для этого в настройках домена у регистратора нужно добавить DNS-запись типа A.
Запускаем бота. Он автоматически определит домен по настройкам Nginx, но запросит подтверждение, а также задаст несколько других вопросов. Затем он устанавливает сертификат и обращается по доменному имени для проверки. Настройки Nginx для HTTPS он меняет сам.
echo -e '#!/bin/sh\n\ncertbot renew\n' | sudo tee /etc/cron.daily/certbot-renew > /dev/null sudo chmod 0755 /etc/cron.daily/certbot-renew
Обновление сертификата надо добавить в cron для ежедневного запуска.
sudo certbot renew --dry-run
Есть специальная команда для проверки, пройдет ли обновление без ошибок.
Настройка проекта
sudo apt-get install git curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Composer лучше не ставить через apt-get, там старая версия. На сайте Composer есть скрипт для более безопасной установки с проверкой хеша. Можно использовать его, или просто взять оттуда текущий хеш и проверить вручную.
cd /var && rm -rf www/html # set repository URL here git clone . www cd www git checkout dev ln -s public html composer install
Клонируем проект и устанавливаем зависимости. Вставьте свой репозиторий и название ветки.
Nginx настроен на папку html , надо ее убрать и сделать симлинк на папку где в проекте находится index.php . В Laravel это папка public .
sudo chgrp -R www-data storage bootstrap/cache sudo chmod -R ug+rwx storage bootstrap/cache sudo chmod -R 0777 storage/framework/cache
Устанавливаем права на папки специально для Laravel. Подробнее здесь.
cp .env.example .env && php artisan key:generate
Создаем рабочий файл с настройками окружения. Далее все как обычно — создаем, настраиваем, прописываем.