Introducción
Escribí un pequeño programa recientemente, pero se debe acceder a la interfaz del pequeño programa a través de https, así que lo reenvié con nginx. Pensando que el motor de búsqueda de Google aumentaría el peso del sitio web https, simplemente transformé mi sitio web para admitir tanto http como https. Ver efecto
acceso http
acceso al formulario https
Usé LET'S ENCRYPT para generar el certificado, esta debería ser la herramienta más usada y es muy conveniente.
Me refiero directamente al documento oficial sobre el uso de nginx en CentOS 7 para que el sitio web admita
https://certbot.eff.org/lets-encrypt/centosrhel7-nginx
1. Descarga
sudo yum install certbot python2-certbot-nginx
2. Ejecute el comando.
Modifique el archivo nginx.conf en el directorio / usr / local / nginx / conf por defecto
certbot --nginx -d www.erlie.cc
Si no está en este directorio, puede usar el parámetro --nginx-server-root para especificar
certbot --nginx --nginx-server-root=/yourpath -d www.erlie.cc
Si desea generar para varios nombres de dominio
-d 域名1 -d 域名2
O especifique una cada vez y ejecute varias veces
. Habrá dos opciones 1 y 2 durante el proceso
Si elige 1, puede acceder a través de HTTP y HTTPS.
Si elige 2, todas las solicitudes que lleguen a través de HTTP serán redirigidas 301 a HTTPS
Puede encontrar varios problemas ambientales en el camino y Google puede resolverlos.
Dije que encontré un pozo. No elegí el módulo SSL al compilar, así que tuve que volver a compilar. Después de compilar, reinicié con el siguiente comando
nginx -s reload
Como resultado, el acceso https ha sido problemático y luego me di cuenta. El nginx regenerado en el directorio sbin debe reiniciarse para que surta efecto.
nginx -s reload es solo un archivo de configuración de implementación en caliente, el archivo binario nginx no tiene efecto
En este punto se puede acceder a http://www.erlie.cc y https://www.erlie.cc
configuración de nginx.conf
server {
listen 80;
server_name www.erlie.cc; #charset koi8-r; access_log /usr/local/nginx/logs/access.log combined;
location = / { root /product/new-blog-fe/dist/view; index index.html; } location ~ .*\.html$ { root /product/new-blog-fe/dist/view; index index.html; } location / { proxy_pass http://127.0.0.1:8080/;
} location ~ .*\.(gif|jpeg|png|bmp|swf|flv|ico)$ { root /product/new-blog-fe; if (-f $request_filename) {
expires 1d;
break;
} } location ~ .*\.(js|css)?$ { root /product/new-blog-fe; if (-f $request_filename) {
expires 1d;
break;
} } #error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html; } listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.erlie.cc/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/www.erlie.cc/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
Las últimas 5 líneas las genera automáticamente el comando anterior, que es muy conveniente y no necesita ser configurado por usted mismo.
Puede ver que reenvié todas las solicitudes para la interfaz al http://127.0.0.1:8080/ local, debería haber adivinado que este es un proyecto Spring Boot
¿Cómo escribir el front-end?
Para permitir que el front-end llame a la interfaz http cuando el visitante accede a ella a través de http. Llame a la interfaz https cuando acceda a través de https, hago esto
nb.js
var conf = {
serverHot : window.location.origin};var _nb = { request: function (param) {
var _this = this; $.ajax({ type : param.method || 'get',
url : param.url || '',
dataType : param.type || 'json',
data : param.data || '',
xhrFields : {withCredentials: true},
crossDomain: true,
contentType: param.contentType || 'application/x-www-form-urlencoded;charset=UTF-8',
success: function (res) {
typeof param.success === 'function' && param.success(res.data, res.msg);
}, error: function (err) {
typeof param.error === 'function' && param.error(err.statusText);
} }) }, // 获取服务器地址 getServerUrl : function(path) {
return conf.serverHot + path;
}}module.exports = _nb;123456789101112131415161718192021222324252627282930
window.location.origin para obtener una dirección de solicitud como https://www.erlie.cc, puede probarlo usted mismo en el navegador
user-service.js solicita interfaces relacionadas con el usuario
var _nb = require('util/nb.js');
var _user = { // 用户登录 login : function(userInfo, resolve, reject){
_nb.request({ url : _nb.getServerUrl('/user/login'),
data : userInfo, method : 'POST',
success : resolve, error : reject
}); }}module.exports = _user;123456789101112131415
userInfo es el parámetro de solicitud
resolver es la función que se ejecuta después de que la llamada es exitosa
rechazar es la función que se ejecuta después de que la llamada falla
Renovación Automática
El certificado de Let's Encrypt caduca en 90 días, por lo que debe configurar un script de actualización automático. La forma más sencilla es usar crontab. Use el comando crontab -e para agregar la siguiente entrada de trabajo de sincronización (actualización obligatoria cada mes)
0 0 * * * certbot renew