LINUX.ORG.RU

не работает ssl в nginx

 , , ,


0

2

Доброго времени суток , назрел вопрос =) есть задача , с помощью nginx настроить реверс прокси + статику , суть в том что реверс прокси идет на docker containder wordpress -а , задача образовательная но хочу как то это сделать ) так вот , проблема в том что нужно добавить ssl , что я сделал , поднял контейнер и настроил (вроде бы) реверс прокси на него , добавил еще один виртуал хост где настроил статику , но ssl не поднимается (его я сгенерил через утилиту openssl) ниже конфиги:

/etc/nginx/sites-available/testhost.ru

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	# SSL configuration
	listen 443 ssl default_server;
	ssl on;
	ssl_certificate /etc/nginx/ssl/nginx.crt;
	ssl_certificate_key /etc/nginx/ssl/nginx.key;
	root /var/www/testhost.ru/public_html;

	# Add index.php to the list if you are using PHP
	#index index.html index.htm index.nginx-debian.html;

	server_name testhost.ru www.testhost.ru;

	location / {
 		proxy_pass http://localhost:7373;
		
		try_files $uri $uri/ =404;
	}
	#location /static/ {
        #        root /var/www/;
        #        index index.htm index.html;
        #        autoindex on;
        # }
	# pass the PHP scripts to FastCGI server listening on 
        #127.0.0.1:9000

	#
	#location ~ \.php$ {
	#	include snippets/fastcgi-php.conf;
	#
	#	# With php7.0-cgi alone:
	#	fastcgi_pass 127.0.0.1:9000;
	#	# With php7.0-fpm:
	#	fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	#}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	#location ~ /\.ht {
	#	deny all;
	#}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}


и поднял контейнеры :

sudo docker run -d -v /docker_files/mysql:/var/lib/mysql --name=data_base1 -e MYSQL_ROOT_PASSWORD=password mysql:5.7

sudo docker run -d --name=mywp11 --link=data_base1 -p 7373:80 -e WORDPRESS_DB_HOST=data_base1 -e WORDPRESS_DB_PASSWORD=password wordpress:4.7

в итоге при переходе на 192.168.1.6 попадаем на мой вордпресс , дальше настроил статический просмотр вот так :


server {
	listen 5656 default_server;
	listen [::]:5656 default_server;

	# SSL configuration
	listen 443 ssl default_server;
	ssl on;
	ssl_certificate /etc/nginx/ssl/nginx.crt;
	ssl_certificate_key /etc/nginx/ssl/nginx.key;
	root /var/www/html/;

	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html;

	#server_name static.ru www.static.ru;

	#location / {
 	#	proxy_pass http://localhost:7373;
	#	
	#	try_files $uri $uri/ =404;
	#	}
	location / {
                root /var/www/html/;
                index index.htm index.html;
                autoindex on;
         }

}



вроде все работает , но есть один момент , если расcкоментировать мои настройки ssl , то при переходе по ссылке используя скажем так приставку в начале адреса https то подключение всеравно не защищено..... кто подскажет , как хотя бы запустить что бы шифровало и все , или мож у кого есть совет как лучше это сделать ))))


Ответ на: комментарий от joy4eg

Эх , скажу так :

-есть вордпресс контейнер , вордпресом заправляет апач, там ssl вообще не настроен - есть nginx на хост системе , который проксирует на этот контейнер и подключает ssl - и вот собственно вопрос , это так делается ??? я правильно сделал ? или нужно ssl еще и в контейнере как то настраивать ?) зарание спасибо!))))

echo_ ()
Ответ на: Эх , скажу так : от echo_

По поводу апача не скажу, но nginx умеет редиректить прекрасно. Сделай один server на 80, оттуда редиректь на сервер с 443 и ssl по 301.

Редиректить на другой IP точно так же. Только редирект на 443 с твоим вордпрессом лучше прямо в контейнере, средствами апача.

r3lgar ★★★★ ()
Ответ на: комментарий от bdfy

понял

в принципе мне не важно как оно работать будет) главное что бы пошло) то есть при переходи на мой ип 192.168.1.6 я попадал на этот адрес localhost:7373 (на нем поднят мой wp) на этом в приципе можно и остановиться=) сейчас сделал так :

server { #блочная директива (они бывают двух видов)
        # SSL Конфигурация
        listen *:443 ssl; #прослушиваем 443 порт для ssl
        include /etc/nginx/ssl.conf;
        location / { # при переходе по адресу сервера
                proxy_pass http://localhost:7373; #проксируем запрос на docker контейнер        
                proxy_connect_timeout 10s; #таймаут 10 c 
                #proxy_pass=Задаёт протокол и адрес проксируемого сервера
                try_files $uri $uri/ =404 ; #uri=universal resource identifier , если файл не найден , то выдаем страницу ошибки.
                #try_files=проверяет существование файлов
        }
}

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

echo_ ()
Ответ на: комментарий от r3lgar

но на два порта IPv4 оно работать не будет

Эт ещё почему? На сколько я понимаю главное что бы IP:port отличались, а так хоть десять портов слушай одним server-ом

У меня четыре listen-а на server. IPv4:80, IPv6:80, IPv4:443, IPv6:443. В моём случае так настраивать удобнее

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

хм , а я думал что я что то не так понял=)

тот вариант что выше кинул с комментами , вроде работает , но все же https в адресной строке перечеркнут , и контент (скрипты и т д) подгружаются только по разрешению с браузера...я так понямаю это все изза того что ssl самопальный ? или что то такие не так настроил я ? благодарен зарание)))

echo_ ()
Ответ на: хм , а я думал что я что то не так понял=) от echo_

https в адресной строке перечеркнут

Жмякни на значок, увидишь, что браузеру не нравится.

я так понямаю это все изза того что ssl самопальный

Правильно понимаешь. Твой сертификат без CA (ибо самоподписанный) или с недоверенным CA, вот твоему браузеру скорее всего это не нравится (разве может быть безопасным соединение, сертификату которого нельзя доверять?).

r3lgar ★★★★ ()
Ответ на: комментарий от r3lgar

как слушает?

ну смотри , если настроить так как я сделал , то при переходе по адресу 192.168.1.6 ты попадаешь куда надо без шифрования , по 80 порту ) если ты добавляешь приставку https , то сразу тебя пускает по 443, по крайней мере у меня такая дичь заработала))) что можно еще интересного добавить в реверс прокси настройки ?) никто не вкурсе?)

echo_ ()
Ответ на: как слушает? от echo_

если настроить так как я сделал , то при переходе по адресу 192.168.1.6 ты попадаешь куда надо без шифрования , по 80 порту ) если ты добавляешь приставку https , то сразу тебя пускает по 443

А, ну да, логично. Мне-то нужен с 80 редирект на 443. Без этого https вообще никому не нужен — не знаю ни одного юзера, который вручную станет париться вводить https://, а без указания протокола браузер подставляет http://.

по крайней мере у меня такая дичь заработала

Вся суть в автоматическом редиректе на https, 80 вообще не нужен.

что можно еще интересного добавить в реверс прокси настройки ?

Зачем? KISS.

r3lgar ★★★★ ()
Последнее исправление: r3lgar (всего исправлений: 1)
Ответ на: комментарий от r3lgar

Ну, nignx я изучаю , хочу что то интересное)))

ну , я послушался совета и 80 убрал ) теперь если перейти без https просто пустая страница , что бы ее не было , что нужно добавить ? сделать какой то локейшин или можно какой то директивой обойтись?)

echo_ ()
Ответ на: хм , а я думал что я что то не так понял=) от echo_

но все же https в адресной строке перечеркнут

Так вот как у тебя «https не работает». Так у тебя видимо просто сайт генерит ссылки с http://, поэтому на https странице есть ссылки на http (в том числе на скрипты, стили и изображения используемые на странице). Это уже не к nginx, это к WP (или что там у тебя). В простом случае всё решается изменением адреса сата в админке WP. В более запущенных случаях нужно вычищать http:// из самописного кода и текста постов (спасает автозамета). В самых запущенных случаях нужно доделывать работу за разработчиков тем и плагинов (но с живыми темами и плагинами такое бывает редко)

MrClon ★★★★★ ()
Ответ на: комментарий от r3lgar

Как у тебя в одном server слушает одновременно с ssl и без?

Просто. С чего бы не работать? Давай показывай конфиг в котором у тебя не работает. Может там какие-то экзотические параметры сокета заданы, хотя по идее какая разница

MrClon ★★★★★ ()

теперь если перейти без https просто пустая страница

Правильно, 80 порт теперь никто не слушает, соответственно, выдавать некому.

что бы ее не было , что нужно добавить ?

Сделай server с 80 портом с переадресацией по 301 на 443 порт, и у тебя при заходе на http будет https перманентно.

r3lgar ★★★★ ()