LINUX.ORG.RU
решено ФорумAdmin

Два сайта на одном nginx

 ,


1

1

Я запутался в серверных блоках. Это такие шняги в nginx для того, чтобы держать два сайта на одном nginx.

Вот у меня есть сайт в дефолтном каталоге nginx. Он работает, но я хочу чтобы был еще сайт dir.

  1. создал /etc/nginx/sites-available/dir
  2. сделал ему и nginxу симлинки на /etc/nginx/sites-enabled/
  3. В конфиге nginx.conf я писал include /etc/nginx/sites-enabled/*; ну или вместо этого писал include /etc/nginx/sites-enabled/dir; пути до них, но похоже это до задницы.

В серверном блоке nginx написано блокировать доступ по http в 404. А в серверном блоке dir доступ только по http. Но в результате у меня работает http://your_ip - открыватся dir, а https://your_ip - открывается nginx.
И еще, если глобально работает сайт по ip, то работает phpmyadmin, а если по каталогам http(s)://your_ip/dir, то phpmyadmin не работает.

Вчера настраивал абсолютно тоже самое и у меня был доступ к сайту только по http(s)://your_ip/dir и http(s)://your_ip/nginx. С этого момента я перестал понимать как оно работает, потому-что работает каждый раз по-разному. Я уже в конекретном недоразумении.

Задача: Сделать с доступом по http(s)://your_ip/dir и желательно, чтобы phpmyadmin работал. В будущем планировал еще на него устанавливать софт с веб-интерфейсами для доступа также по http(s)://your_ip:port Пока-что спасаюсь контейнерами.

Имеется: Nginx, php74, php-fpm, ssl, mysql57-server, phpmyadmin.

Если нужно, выложу nginx.conf и содержимое серверных блоков. Жду пинок под сраку в нужное направление.



Последнее исправление: Pinux001 (всего исправлений: 1)

Тебе нужно делать доступ по доменным именам, servername. В этом случае две конфигурации vhost будут висеть на одном порту (80, 443), а соответствующий vhost будет выбираться в зависимости от того запрос на какой servername пришел на сервер.

Либо вешай разные сайты на разные порты.

В этом случае будешь заходить на http://ip:port/

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)

Ничерта не понял. Что за дистр? В большинстве дистров обычно nginx.conf ковырять не нужно, там всё уже настроено, знай да пиши маленькие конфиги с серверными блоками и клади их в sites-available и делай симлинк внутрь sites-enabled, см., например, этот гайд:

https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04

EXL ★★★★★
()

эпичная интеллектуальная катастрофа

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

У меня разные servername написаны, но почему-то файл для nginx у меня в приоритете над остальными.

Чтобы указать на другой серверный блок мне пришлось добавить в него еще и сектор location.

Попробую на разные порты.

Pinux001
() автор топика

В server с заглушкой у всех listen есть default_server? А в server для dir default_server точно не указан? Вообще выше правильно дали ссылку на доку nginx, прочти, там всё вполне понятно и даже по русский

MrClon ★★★★★
()

а если по каталогам, то phpmyadmin не работает.

Да, у него другой симлинк. Например:

% ls -l /usr/local/www/nginx-dist/phpmyadmin
lrwxr-xr-x  1 root  wheel  26 Apr 12 20:13 /usr/local/www/nginx-dist/phpmyadmin -> /usr/local/www/phpMyAdmin/

Но дело в том, что…

% ls -l /usr/local/www/nginx
lrwxr-xr-x  1 root  wheel  25 Apr 12 18:56 /usr/local/www/nginx -> /usr/local/www/nginx-dist

Поэтому:

https://your_ip/nginx-dist/phpmyadmin/
Clockwork ★★★★★
()
Последнее исправление: Clockwork (всего исправлений: 1)

В серверном блоке nginx написано блокировать доступ по http в 404. А в серверном блоке dir доступ только по http. Но в результате у меня работает http://your_ip - открыватся dir, а https://your_ip - открывается nginx.

Почему «Но»? Оно работает так, как ты его настроил.

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

http://your_ip - открыватся dir, а https://your_ip - открывается nginx.

Я хотел чтобы получилось так:

https://your_ip/nginx - открывается nginx
http://your_ip/nginx - блокируется доступ к http
http://your_ip/dir - открывается dir
http://your_ip - блокируется доступ к http
Pinux001
() автор топика
Ответ на: комментарий от Pinux001
server {
    listen 80;
    server_name git.a2s.su;
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;

    server_name git.a2s.su;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

	location / {
		proxy_pass http://localhost:3000/;
	}
}
IIIypuk ★★★★
()
Ответ на: комментарий от MrClon

В server с заглушкой у всех listen есть default_server? А в server для dir default_server точно не указан?

Не было у всех. Проблема была в этом, спасибо. Чтобы избавится от матрешки перенес все в sites-available/nginx

указал server_name ""; и другие вещи

Pinux001
() автор топика
Ответ на: комментарий от IIIypuk

У меня нету прокси пасс. Получился такой файл sites-available/nginx

https://your_ip/nginx - открывается nginx

server {
    listen *:443 ssl;
    server_name nginx;
    ssl_certificate /etc/ssl/certs/server.pem;
    ssl_certificate_key /etc/ssl/private/server.key;
    root /usr/local/www;
    index index.php index.html;
    location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/www$fastcgi_script_name;
            include        fastcgi_params;
        }
}

http://your_ip - блокируется доступ к http

server {
    listen *:80 default_server;
    server_name "";
    return 404; 
}
Pinux001
() автор топика
Ответ на: комментарий от Pinux001

Вместо proxy_pass укажи root, в чём проблема или как ты сделал fastcgi_pass.

блокируется доступ к http

Можешь «блокировать», возвращая 404, а можешь делать как я и перенаправлять на HTTP.

Никто не будет смотреть, почему у твой сайт через https работает, а через http нет.

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

Вроде всё верно, если ты конечно заполнил у себя server_name ""; и server_name nginx;

Там должно быть написано одинаковое доменное имя. www.example.site и example.site - разные вещи.

* в listen не нужна.

Обе дериктивы server можно хранить в одном файле.

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

Обе дериктивы server можно хранить в одном файле.

это один файл для sites-available/nginx, для dir другой есть.

Вроде всё верно, если ты конечно заполнил у себя server_name "";

Зачем? суть как раз в том, чтобы блокировать http://your_ip, то есть любое http

Никто не будет смотреть, почему у твой сайт через https работает, а через http нет.

Это для меня чисто, я пару дней назад впервые nginx увидал)) Тем более, что я собирался еще ставить софт для доступа по http(s)://your_ip:port

Вместо proxy_pass укажи root, в чём проблема или как ты сделал fastcgi_pass.

Я не знаю зачем нужно proxy_pass. А fastcgi_pass нужно было для php-fpm. Или как еще php настроить без истерики?

Pinux001
() автор топика
Ответ на: комментарий от Pinux001

proxy pass для других сервисов с веб мордой, торренты например, Приложухи на Go, C

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

Можно на один домен вешать много сервисов

location /torrent { root ...; }
location /git { root ...; }
IIIypuk ★★★★
()

Но в результате у меня работает http://your_ip - открыватся dir, а https://your_ip - открывается nginx.

Значит, ты в dir описал http, а https - не описал, только и всего.

https://your_ip работать не будет, https вешается на домен.

Dimez ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.