Быстрая настройка тестового https-сервера

Инструкция по бстрому созданию https-сервера. Просто как по быстрому всё поднять без оглядки на безопасность. Использовался Linux Mint 17.3 загруженнй с live-usb флэшки

1. Устанавливаем веб-сервер

mint@mint ~ $ sudo apt-get install nginx php5

2. Создаём самоподписанный сертификат по инструкции https://devcenter.heroku.com/articles/ssl-certificate-self

mint@mint ~ $ which openssl
/usr/bin/openssl
mint@mint ~ $ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
Generating RSA private key, 2048 bit long modulus
……….+++
…………………………………………………………………………….+++
e is 65537 (0x10001)
mint@mint ~ $ ls
Desktop    Downloads  Pictures  server.pass.key  Videos
Documents  Music      Public    Templates
mint@mint ~ $ openssl rsa -passin pass:x -in server.pass.key -out server.key
writing RSA key
mint@mint ~ $ ls
Desktop    Downloads  Pictures  server.key       Templates
Documents  Music      Public    server.pass.key  Videos
mint@mint ~ $ openssl req -new -key server.key  -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
——
Country Name (2 letter code) [AU]:Russia
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:66
Locality Name (eg, city) []:Ekaterinburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PupkinCorp
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:test@localhost

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
mint@mint ~ $ ls
Desktop    Downloads  Pictures  server.csr  server.pass.key  Videos
Documents  Music      Public    server.key  Templates
mint@mint ~ $ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=RU/ST=66/L=Ekaterinburg/O=PupkinCorp/OU=IT/CN=localhost/emailAddress=test@localhost
Getting Private key
mint@mint ~ $

3. Копируем сертификат и ключ в папку с конфигами nginx

mint@mint ~ $ sudo cp server.key /etc/nginx/
mint@mint ~ $ sudo cp server.crt /etc/nginx/
mint@mint ~ $ sudo bash
mint ~ # cd /etc/nginx/
mint nginx # ls
conf.d          mime.types           nginx.conf    server.key       win-utf
fastcgi_params  naxsi_core.rules     proxy_params  sites-available
koi-utf         naxsi.rules          scgi_params   sites-enabled
koi-win         naxsi-ui.conf.1.4.1  server.crt    uwsgi_params

4. Правим конфиг веб-сервера — снимаем комментарии с секции про HTTPS и вписываем имена файлов нашего сертификата и ключа (подглядывал в http://nginx.org/en/docs/http/configuring_https_servers.html)

mint nginx # nano sites-enabled/default

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

root html;
index index.html index.htm;

ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;

ssl_session_timeout 5m;

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers «HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES»;
ssl_prefer_server_ciphers on;

location / {
try_files $uri $uri/ =404;
}
}

5. Сохраняемся и перезапускаем веб-сервер

mint sites-available # service nginx stop
mint sites-available # service nginx start

6. В браузере открываем https://localhost/, добавляем исключение (браузер будет ругаться, что сертификат самоподписанный), после этого должны увидеть «Welcome to nginx!» — это будет значить, что успешно через HTTPS открылся файл /usr/share/nginx/html/index.html.

У кого будут замечания и полезне советы, как всё это сделать правильнее — отписывайтесь.

Пример PHP MySQL

Взято здесь

 <?php
// Соединяемся, выбираем базу данных
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
    or die('Не удалось соединиться: ' . mysql_error());
echo 'Соединение успешно установлено';
mysql_select_db('my_database') or die('Не удалось выбрать базу данных');

// Выполняем SQL-запрос
$query = 'SELECT * FROM my_table';
$result = mysql_query($query) or die('Запрос не удался: ' . mysql_error());

// Выводим результаты в html
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($line as $col_value) {
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";

// Освобождаем память от результата
mysql_free_result($result);

// Закрываем соединение
mysql_close($link);
?> 

 

Использование $_POST и $_GET в php

$_POST и $_GET — массивы, которые содержат значения переменных, прилетевших от клиента через форму или Javascript.

Пример содержимого $_GET:

Array
 (
     [name] => vasya
     [age] => 34
 )

Пример извлечения значения нужной переменной из $_POST:

$contents = $_POST['contents'];

Пример проверки наличия нужной переменной в запросе:

if ($_GET['data_binary']){...}

 

Как загрузить файл на сервер через php

В простейшем случае для загрузки файлов на сервер через php понадобится создать 2 файла на хостинге. Первый будет содержать форму для выбора файла и может быть написан на чистом html. Второй — на php, будет принимать данные из нашей формы и сообщать о результатах.

Код файла с формой index.php:

<!doctype html><html>
<head>

</head>
<body>
<form enctype="multipart/form-data" action="/upload.php" method="POST">
    <!-- MAX_FILE_SIZE -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Имя этого input`а определит имя файла в массиве $_FILES -->
    Выбрать файл: <input name="userfile" type="file" />
    <input type="submit" value="Отправить" />
</form>
</body>
</html>

Код файла upload.php, принимающего данные:

<?php
// В версиях PHP до 4.1.0, надо использовать $HTTP_POST_FILES вместо $_FILES.

$uploaddir = '/home/user/upload/'; //Куда сохраним файлы
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "Файл успешно загружен куда надо\n";
} else {
    echo "Загрузить не удалось!\n";
}

// эти две ниже можно раскоментировать:
//echo 'Информация для отладки:';
//print_r($_FILES);

print "</pre>";

?>

Сохранять файлы безопаснее в папке, не доступной через вебсервер (за пределами корневой папки самого сайта, на который выкладываем скрипты .php)

Размер загружаемых файлов может быть ограничен настройками веб-сервера или php.