Docker + Vue.js + Nginx on Vps Debian/Apache 错误 "Error during SSL Handshake with remote server"
Docker + Vue.js + Nginx on Vps Debian/Apache error "Error during SSL Handshake with remote server"
我正在尝试使用 Docker Compose 将与我的网络应用程序 (Vue.js) 相关的所有内容容器化,包括 VPS OVH Debian+ 上的 Nginx 和 SSL 证书 (Certbot)阿帕奇
我有这个错误:
“代理服务器无法处理请求
原因:与远程服务器进行 SSL 握手时出错
如果有人能指出我哪里出错了,我将不胜感激!
Docker-compose.yml
services:
my-app-prod:
container_name: my-app-prod
build:
context: .
dockerfile: Dockerfile-prod
ports:
- '8080:80'
- '4567:443'
Docker文件生产
FROM node:12.2.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json
RUN npm install --silent
RUN npm install @vue/cli@3.7.0 -g
COPY . /app
RUN npm run build
# production environment
FROM nginx:1.16.0-alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
EXPOSE 443
CMD ["nginx", "-g", "daemon off;"]
sites-avalaibles/nom-de-domaine.fr.conf
ServerName nom-de-domaine.fr
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ProxyPassReverseCookieDomain 127.0.0.1 nom-de-domaine.fr
RewriteEngine on
RewriteCond %{SERVER_NAME} = nom-de-domaine.fr
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
sites-avalaibles/nom-de-domaine.fr-le-ssl.conf
<VirtualHost *:443>
ServerName nom-de-domaine.fr
# ProxyPreserveHost On
# SSLProxyEngine On
# SSLProxyVerify none
# SSLProxyCheckPeerCN off
# SSLProxyCheckPeerName off
# SSLProxyCheckPeerExpire off
# SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
ProxyPass / https://127.0.0.1:4567/
ProxyPassReverse / https://127.0.0.1:4567/
ProxyPassReverseCookieDomain 127.0.0.1 nom-de-domaine.fr
SSLCertificateFile /etc/letsencrypt/live/ nom-de-domaine.fr /fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ nom-de-domaine.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ nom-de-domaine.fr /chain.pem
Include /etc/letsencrypt/options-ssl-apache.conf
CustomLog "/var/log/apache2/ nom-de-domaine.fr _log" "%h %l %u %t \"%r\" %>s %b"
</VirtualHost>
</IfModule>
正如我从 post 标记和配置文件中看到的那样,您使用的是 Apache,而不是 nginx(至少在主机上)。
在主机和你的容器之间你不需要通过 ssl 的 http 因为它在本地主机 (== 127.0.0.1) 网络中,你的 ProxyPass 应该指向端口 8080,你不需要公开您容器的 443 端口。
通常这是我制作配置文件的方式:
default.conf:
<VirtualHost *:80>
ServerName nom-de-domaine.fr
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
默认-le-ssl.conf:
<VirtualHost *:443>
ServerName nom-de-domaine.fr
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
# From certbot:
SSLCertificateFile /etc/letsencrypt/live/nom-de-domaine.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nom-de-domaine.fr/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
端口 80 (http) 的虚拟主机仅用于永久重定向到端口 443(http 通过 ssl - https),以防止访问者通过非加密的 http 请求您的应用程序。
我正在尝试使用 Docker Compose 将与我的网络应用程序 (Vue.js) 相关的所有内容容器化,包括 VPS OVH Debian+ 上的 Nginx 和 SSL 证书 (Certbot)阿帕奇
我有这个错误:
“代理服务器无法处理请求
原因:与远程服务器进行 SSL 握手时出错
如果有人能指出我哪里出错了,我将不胜感激!
Docker-compose.yml
services:
my-app-prod:
container_name: my-app-prod
build:
context: .
dockerfile: Dockerfile-prod
ports:
- '8080:80'
- '4567:443'
Docker文件生产
FROM node:12.2.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json
RUN npm install --silent
RUN npm install @vue/cli@3.7.0 -g
COPY . /app
RUN npm run build
# production environment
FROM nginx:1.16.0-alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
EXPOSE 443
CMD ["nginx", "-g", "daemon off;"]
sites-avalaibles/nom-de-domaine.fr.conf
ServerName nom-de-domaine.fr
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ProxyPassReverseCookieDomain 127.0.0.1 nom-de-domaine.fr
RewriteEngine on
RewriteCond %{SERVER_NAME} = nom-de-domaine.fr
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
sites-avalaibles/nom-de-domaine.fr-le-ssl.conf
<VirtualHost *:443>
ServerName nom-de-domaine.fr
# ProxyPreserveHost On
# SSLProxyEngine On
# SSLProxyVerify none
# SSLProxyCheckPeerCN off
# SSLProxyCheckPeerName off
# SSLProxyCheckPeerExpire off
# SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
ProxyPass / https://127.0.0.1:4567/
ProxyPassReverse / https://127.0.0.1:4567/
ProxyPassReverseCookieDomain 127.0.0.1 nom-de-domaine.fr
SSLCertificateFile /etc/letsencrypt/live/ nom-de-domaine.fr /fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ nom-de-domaine.fr/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ nom-de-domaine.fr /chain.pem
Include /etc/letsencrypt/options-ssl-apache.conf
CustomLog "/var/log/apache2/ nom-de-domaine.fr _log" "%h %l %u %t \"%r\" %>s %b"
</VirtualHost>
</IfModule>
正如我从 post 标记和配置文件中看到的那样,您使用的是 Apache,而不是 nginx(至少在主机上)。
在主机和你的容器之间你不需要通过 ssl 的 http 因为它在本地主机 (== 127.0.0.1) 网络中,你的 ProxyPass 应该指向端口 8080,你不需要公开您容器的 443 端口。
通常这是我制作配置文件的方式:
default.conf:
<VirtualHost *:80>
ServerName nom-de-domaine.fr
RewriteEngine on
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
默认-le-ssl.conf:
<VirtualHost *:443>
ServerName nom-de-domaine.fr
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
# From certbot:
SSLCertificateFile /etc/letsencrypt/live/nom-de-domaine.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nom-de-domaine.fr/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
端口 80 (http) 的虚拟主机仅用于永久重定向到端口 443(http 通过 ssl - https),以防止访问者通过非加密的 http 请求您的应用程序。