Я новичок в этом деле, и у меня есть несколько вопросов, на которые я не смог бы ответить через Google.
Если я правильно понял - nginx - это мой веб-сервер - запрос намой сервер готов и nginx обслуживает моего клиента (Angular), но могу ли я также использовать свое приложение Express для обслуживания его с res.sendFile()
?И если я настрою nginx с обратным прокси, он будет работать как экземпляр между моим клиентом и бэкэндом?Таким образом, они не общаются друг с другом напрямую, а через nginx, и для этого мне необходимо proxy_pass
мое приложение Express?
Мой доступный конфиг сайтов nginx:
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name blank-agency.org www.blank-agency.org;
return 301 https://$server_name$request_uri;
}
server {
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl on;
ssl_certificate /etc/letsencrypt/live/blank-agency.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blank-agency.org/privkey.pem;
server_name blank-agency.org www.blank-agency.org;
root /var/www/webserver/public/website;
location ~ /.well-known {
allow all;
}
location / {
proxy_pass https://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Как выможно увидеть мою структуру каталогов:
/ var / www / webserver -> вот мой экспресс app.js
/ var / www / webserver / public / website -> вотмои угловые файлы dist
Если я использую nginx в качестве обратного прокси-сервера, мой клиент больше не обслуживается (bad gateway 502
), поэтому я полагаю, что теперь мне нужно обслуживать его через приложение Express?
Итактеперь мой app.js
:
// require section
var express = require('express'),
mysql = require('mysql'),
bodyParser = require('body-parser'),
cors = require('cors'),
path = require('path'),
app = express();
// middlewares bodyParser + cors
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cors());
var connection = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'whatever',
database: 'whateverDB'
});
connection.connect();
app.use( express.static(__dirname + '/public/website'));
app.get('/', function(req, res){
res.sendFile(path.join(__dirname + '/public/website/index.html'));
});
app.route('/customers').get((req, res) => {
connection.query('SELECT * FROM customers', function (err, rows) {
const results = JSON.stringify(rows);
console.log(req.param("term"));
res.send(results);
})
})
// app listen port
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
Опять же, все, кажется, работает нормально ... но почему я могу получить доступ к своему приложению через http://blank-agency.org:3000
?Прежде всего HTTP-запросы должны быть перенаправлены на HTTPS?То же самое для https://blank -агентства / клиентов -> мои данные, отображаемые по URL, кажутся проблемой безопасности, ха-ха
Я получаю, что они обрабатываются на порту 3000
, потому что я отправилэто через мое приложение Express, которое прослушивает порт 3000, но как еще его обслуживать?Поскольку nginx с настройкой обратного прокси-сервера выдает ошибку 502
, как уже упоминалось, и я уже открыл порты 80 & 443
на моем брандмауэре через iptables
в Linux.
netstat -tlpn
покажите nginx на портах 80 и 443
systemctl status nginx
и
nginx -t
все в порядке.
Полагаю, у меня глубокое недопонимание понятий, используемых здесь, или что-то еще не так.Дайте мне знать, если вам нужна дополнительная информация.
Заранее спасибо:)