Сервер Webpack Dev, що працює на HTTPS / Web Sockets Secure


80

Зазвичай у режимі розробника Webpack працює за допомогою HTTP. Зазвичай існує веб-сервер, що обслуговує вміст через HTTP та webpack, використовуючи http / websockets на окремому порту.

Чи можна запустити веб-сервер на https та webpack на https / websocket secure?


Перечитавши це кілька разів, це може бути дублікатом мого запитання? stackoverflow.com/questions/31973085 / ...
chemoish

Відповіді:


104

Див. Документи webpack

Існує прапор, який ви можете додати до команди webpack-dev-server

webpack-dev-server --https 

4
веб-сервер знаходиться в https, але webpack-dev-server не створює https-з'єднання з socket.io - правильно?
chemoish

Я спробував це, і зараз http більше не працює. Чи є спосіб, як я можу використовувати як https, так і http?
Eschon

@Eschon Ви знайшли якесь рішення для використання як http, так і https?
Мухаммед Атеек Азам

@MuhammadAteeqAzam Ні, але мені це насправді не потрібно було. Просто знадобився деякий час, щоб звикнути завжди відкривати свою локальну версію за допомогою https.
Ешон

Я зробив тут підручник binarycarpenter.com/… . Насправді вам потрібно створити SSL-сертифікат і довіряти йому. Це одноразова настройка, і ви можете повторно використовувати її
приблизно

29

Хоча наведена вище відповідь правильна для cli, якщо ви не в CLI, ви можете зробити щось подібне (у ковтальному завданні):

var WebpackDevServer = require('webpack-dev-server');

new WebpackDevServer(webpack(WebpackDevConfig), {
    https: true,
    hot: true,
    watch: true,
    contentBase: path.join(__dirname, 'src'),
    historyApiFallback: true
}).listen(1337, 'localhost', function(err, result) {
    if (err) {
        console.log(err);
    }
    console.log('Dev server running at https://localhost:1337');
});

При цьому я отримую помилку 502 Bad Gateway. Чи є щось особливе, що я міг налаштувати, що спричиняє це чи щось інше, що мені потрібно? Наприклад, чи працює це в Windows?
Kevin Ghadyani

1
Можливо, вам потрібно змінити порт з 1337 на 443? Або, можливо, вам потрібно включити порт у своєму запиті до сервера, наприклад https: // localhost: 1337? Залиште нам докладнішу інформацію про те, як налаштований ваш сервер та яку URL-адресу ви завантажуєте, і, можливо, ми можемо допомогти більше :)
dangoldnj

1
Я вперше отримав помилки "net :: ERR_INSECURE_RESPONSE" у своєму браузері, оскільки webpack-dev-server використовує самопідписаний сертифікат. Це було виправлено, відвідавши один раз заблокований "https: // .... .js" -url, та повідомивши браузер, що я впевнений, що хочу продовжити.
np8

17

це лише для середовища TEST:

Вам потрібно налаштувати сервер webpack-dev таким чином:

webpack-dev-server --https --cert ./cert.pem --key ./key.pem

Найпростішим способом є створення ключа без парольної фрази (я не знаю наслідків безпеки для цього! Але це лише для тесту).

Щоб вийняти парольну фразу з ключа, використовуйте цю команду:

$ openssl rsa -in key.pem -out newKey.pem

і використовуйте новий ключ у рядку конфігурації попереднього перегляду


5
Це посилання ви розмістили, можливо, воно не таке, як ви задумали?
Нейкіус

2
просто додайте --https, не потрібно --cert ./cert.pem --key ./key.pem, веб-пакет створить сертифікат для себе.
usef_ksa

9
Дійсний сертифікат для мене не створено. Chrome скаржився на зв’язок. Мені довелося встановити сертифікат та ключ, щоб це виправити. Я вибрав налаштування у файлі конфігурації dev.
Девід Фербенкс,

12

З webpack-dev-server --httpsвами створити самостійно підписаний сертифікат. Але це працює не у всіх випадках використання.

Веб-переглядачі попросять вас виняток безпеки та покажуть на панелі url, що з’єднання не захищене.

Тому рекомендується створити довірений сертифікат розробки для localhost за допомогою mkcert

Потім використовуйте його через CLI:

webpack-dev-server --https --key C:/Users/User/localhost-key.pem --cert C:/Users/User/localhost.pem --cacert C:/Users/User/AppData/Local/mkcert/rootCA.pem

або налаштуйте параметр devServer.https у webpack.config.js:

devServer: {
    https: {
        key: fs.readFileSync('C:/Users/User/localhost-key.pem'),
        cert: fs.readFileSync('C:/Users/User/localhost.pem'),
        ca: fs.readFileSync('C:/Users/User/AppData/Local/mkcert/rootCA.pem')
    }
}

mkcert за замовчуванням створює файли .pem у форматі Unix. Отже, якщо ви працюєте в Windows, вам, ймовірно, доведеться перетворити їх у формат Windows за допомогою, наприклад, Notepad ++


8

У моєму випадку мені довелося виконати всі ці команди, щоб отримати сертифікат:

openssl genrsa -out private.key 4096
openssl req -new -sha256 -out private.csr -key private.key
openssl x509 -req -days 3650 -in private.csr -signkey private.key -out private.crt -extensions req_ext
openssl x509 -in private.crt -out private.pem -outform PEM

І ось нарешті:

npm run dev -- --open --https --cert private.pem --key private.key

5

Я працюю над реагуючим проектом, тепер хотів додати SSL-сертифікат до цього проекту та запустити свій веб-сайт за допомогою https.

  1. Додайте https у webpack.config.js

     devServer:{
    
              https: true,
              host: '0.0.0.0', // you can change this ip with your ip
              port: 443,       // ssl defult port number
              inline: true,
    
              historyApiFallback: true,
              publicPath: '/',
              contentBase: './dist',
              disableHostCheck: true
       }
    
  2. Додавання загальнодоступного сертифіката SSL у файл package.json. Якщо ви не хочете додавати сертифікат у файл package.json, тоді вам доведеться додати його на свій webpack.config.js, обов’язково додайте свій сертифікат у свій проект, або ви може це зробити у файлі package.json або webpack.config.js

Для Package.json

scripts: {
                    "test": "echo \"Error: no test specified\" && exit 1",
                    "build": "webpack --mode production",
                    "start": "webpack-dev-server  --open --https --cert /path/to/private.crt --key /path/to/private.key"

            }

АБО webpack.config.js

 devServer:{

              https: true,
              host: '0.0.0.0', // you can change this ip with your ip
              port: 443,       // ssl defult port number
              inline: true,
              https: {
                    key: fs.readFileSync('/path/to/private.pem'),
                    cert: fs.readFileSync('/path/to/private.pem'),
                    ca: fs.readFileSync('/path/to/private.pem')
                    }
              historyApiFallback: true,
              publicPath: '/',
              contentBase: './dist',
              disableHostCheck: true
       }
  1. Запустіть npm startкоманду на терміналі, або ви також можете використовуватиpm2 start npm -- start

httpsу другому зразку коду є два атрибути. Це правильно?
Серхіо Белевський

Я думаю , що він , можливо, мав на увазі перший https: true, що http2: true WebPack документація
Па Бекстрем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.