CINXE.COM

Nginx如何支持HTTPS?手把手教贼简单! | mall学习教程

<!doctype html> <html lang="zh-CN" data-theme="light"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,initial-scale=1" /> <meta name="generator" content="VuePress 2.0.0-rc.14" /> <meta name="theme" content="VuePress Theme Hope 2.0.0-rc.51" /> <style> html { background: var(--bg-color, #fff); } html[data-theme="dark"] { background: var(--bg-color, #1d1e1f); } body { background: var(--bg-color); } </style> <script> const userMode = localStorage.getItem("vuepress-theme-hope-scheme"); const systemDarkMode = window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches; if (userMode === "dark" || (userMode !== "light" && systemDarkMode)) { document.documentElement.setAttribute("data-theme", "dark"); } </script> <meta property="og:url" content="https://www.macrozheng.com/mall/reference/nginx_https_start.html"><meta property="og:site_name" content="mall学习教程"><meta property="og:title" content="Nginx如何支持HTTPS?手把手教贼简单!"><meta property="og:description" content="随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!"><meta property="og:type" content="article"><meta property="og:locale" content="zh-CN"><meta property="og:updated_time" content="2024-09-30T01:14:37.000Z"><meta property="article:author" content="macrozheng"><meta property="article:tag" content="Nginx"><meta property="article:published_time" content="2020-10-25T09:02:00.000Z"><meta property="article:modified_time" content="2024-09-30T01:14:37.000Z"><script type="application/ld+json">{"@context":"https://schema.org","@type":"Article","headline":"Nginx如何支持HTTPS?手把手教贼简单!","image":[""],"datePublished":"2020-10-25T09:02:00.000Z","dateModified":"2024-09-30T01:14:37.000Z","author":[{"@type":"Person","name":"macrozheng","url":"https://www.macrozheng.com"}]}</script><script>var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?7f2d66edc7c08573462a48c973824d8e"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-E83J71N4JR"></script><script>window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-E83J71N4JR');</script><title>Nginx如何支持HTTPS?手把手教贼简单! | mall学习教程</title><meta name="description" content="随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!"> <link rel="preload" href="/assets/style-BAUwsGla.css" as="style"><link rel="stylesheet" href="/assets/style-BAUwsGla.css"> <link rel="modulepreload" href="/assets/app-N9_8XgsU.js"><link rel="modulepreload" href="/assets/nginx_https_start.html-C0CBZiyn.js"> <link rel="prefetch" href="/assets/home.html-Dzcmt9Hd.js" as="script"><link rel="prefetch" href="/assets/index.html-Bta-s3-w.js" as="script"><link rel="prefetch" href="/assets/boot_devtools_start.html-wN3NvnXZ.js" as="script"><link rel="prefetch" href="/assets/elasticsearch_sql_start.html-DGGufSEl.js" as="script"><link rel="prefetch" href="/assets/gradle_docker_start.html-LNly_t22.js" as="script"><link rel="prefetch" href="/assets/gradle_start.html-BjiY3ldY.js" as="script"><link rel="prefetch" href="/assets/http_interface_start.html-BYIR3Vn0.js" as="script"><link rel="prefetch" href="/assets/mall_video_try.html-CiXqofyY.js" as="script"><link rel="prefetch" href="/assets/mall_video_update.html-UrRqTncH.js" as="script"><link rel="prefetch" href="/assets/mybatis_dynamic_sql.html-C8VBKKag.js" as="script"><link rel="prefetch" href="/assets/mysql_master_slave.html-DMs1SxZk.js" as="script"><link rel="prefetch" href="/assets/project_zero_start.html-BoBp7iA4.js" as="script"><link rel="prefetch" href="/assets/rabbitmq_mqtt_start.html-za9uWeDg.js" as="script"><link rel="prefetch" href="/assets/redis_cluster.html-ChDzn5jJ.js" as="script"><link rel="prefetch" href="/assets/springboot_docker_plugin.html-BF9Q4TrZ.js" as="script"><link rel="prefetch" href="/assets/springboot_junit.html-Dlx_jgI6.js" as="script"><link rel="prefetch" href="/assets/springdoc_knife4j.html-iUp5oF-Z.js" as="script"><link rel="prefetch" href="/assets/spring_security_new_use.html-B-_mHJSa.js" as="script"><link rel="prefetch" href="/assets/swagger_springboot_26.html-DuP_M_oX.js" as="script"><link rel="prefetch" href="/assets/admin.html-BXXziqy0.js" as="script"><link rel="prefetch" href="/assets/bus.html-J4RR4GcC.js" as="script"><link rel="prefetch" href="/assets/cloud_catalog.html-CLpGoWXe.js" as="script"><link rel="prefetch" href="/assets/config.html-B76v4e--.js" as="script"><link rel="prefetch" href="/assets/consul.html-B3kvuOBh.js" as="script"><link rel="prefetch" href="/assets/eureka.html-BRgfqxu8.js" as="script"><link rel="prefetch" href="/assets/feign.html-CLvA5uIE.js" as="script"><link rel="prefetch" href="/assets/gateway.html-Dwc6TGF0.js" as="script"><link rel="prefetch" href="/assets/gateway_oauth2.html-BQiXo-4f.js" as="script"><link rel="prefetch" href="/assets/gateway_oauth2_update.html-ZIsVzqkk.js" as="script"><link rel="prefetch" href="/assets/hystrix.html-DQ-cuWrN.js" as="script"><link rel="prefetch" href="/assets/hystrix_dashboard.html-CJjqz4gw.js" as="script"><link rel="prefetch" href="/assets/knife4j_cloud.html-DsL-hUdJ.js" as="script"><link rel="prefetch" href="/assets/loadbalancer_start.html-DGdJzI19.js" as="script"><link rel="prefetch" href="/assets/nacos.html-DcmaBkuj.js" as="script"><link rel="prefetch" href="/assets/oauth2.html-CTR_cjtu.js" as="script"><link rel="prefetch" href="/assets/oauth2_custom.html-B43iS7_q.js" as="script"><link rel="prefetch" href="/assets/oauth2_jwt.html-BosRokNG.js" as="script"><link rel="prefetch" href="/assets/oauth2_sso.html-DzfGV28q.js" as="script"><link rel="prefetch" href="/assets/retrofit_cloud.html-tQMHG4pN.js" as="script"><link rel="prefetch" href="/assets/ribbon.html-B5qKDBu9.js" as="script"><link rel="prefetch" href="/assets/sa_token_cloud_start.html-BUU6W4Jj.js" as="script"><link rel="prefetch" href="/assets/seata.html-CO8xDy38.js" as="script"><link rel="prefetch" href="/assets/sentinel.html-Bt8IsS_f.js" as="script"><link rel="prefetch" href="/assets/sleuth.html-BsEueIeG.js" as="script"><link rel="prefetch" href="/assets/springcloud.html-EQJg59Oy.js" as="script"><link rel="prefetch" href="/assets/zuul.html-GrMIAyFM.js" as="script"><link rel="prefetch" href="/assets/containerd_start.html-B_g6qAEx.js" as="script"><link rel="prefetch" href="/assets/k3s_start.html-CNKGl8cw.js" as="script"><link rel="prefetch" href="/assets/k8s_advance_start.html-DkI2sRde.js" as="script"><link rel="prefetch" href="/assets/k8s_catalog.html-n5p4dWxN.js" as="script"><link rel="prefetch" href="/assets/k8s_doc_start.html-Co5LZ-jJ.js" as="script"><link rel="prefetch" href="/assets/k8s_springboot.html-MyN9lWuo.js" as="script"><link rel="prefetch" href="/assets/k8s_start.html-C9TCf8mo.js" as="script"><link rel="prefetch" href="/assets/rancher_desktop_start.html-DqB5EF2o.js" as="script"><link rel="prefetch" href="/assets/rancher_start.html-apLmkBNU.js" as="script"><link rel="prefetch" href="/assets/docsify_use.html-kZopy1x9.js" as="script"><link rel="prefetch" href="/assets/github_2019.html-Cqs9fk3R.js" as="script"><link rel="prefetch" href="/assets/mall_app_web_publish.html-Ct13LgsH.js" as="script"><link rel="prefetch" href="/assets/mall_learning_update.html-Du8CygVv.js" as="script"><link rel="prefetch" href="/assets/mall_milestone_20k.html-DClprWyC.js" as="script"><link rel="prefetch" href="/assets/mall_milestone_40k.html-BJ31u5WG.js" as="script"><link rel="prefetch" href="/assets/mall_swarm.html-Diw5R1Ef.js" as="script"><link rel="prefetch" href="/assets/mall_swarm_update.html-DT9GqQtT.js" as="script"><link rel="prefetch" href="/assets/mall_swarm_update_27.html-DKyjdiED.js" as="script"><link rel="prefetch" href="/assets/mall_swarm_upgrade.html-D28jLdhy.js" as="script"><link rel="prefetch" href="/assets/mall_tiny_start.html-BGJIYSWQ.js" as="script"><link rel="prefetch" href="/assets/mall_tiny_update.html-Cc4etiNG.js" as="script"><link rel="prefetch" href="/assets/mall_update_27.html-2Nw8V0H5.js" as="script"><link rel="prefetch" href="/assets/mall_upgrade.html-DqlAiWmJ.js" as="script"><link rel="prefetch" href="/assets/my_practical_tutorial.html-c16wdWOW.js" as="script"><link rel="prefetch" href="/assets/vue_learning.html-BvlmYZKi.js" as="script"><link rel="prefetch" href="/assets/apisix_start.html-BOMUM74l.js" as="script"><link rel="prefetch" href="/assets/arthas_idea.html-CBUrzfuz.js" as="script"><link rel="prefetch" href="/assets/arthas_start.html-C4v2j7Fd.js" as="script"><link rel="prefetch" href="/assets/caddy_start.html-GIAZJiEs.js" as="script"><link rel="prefetch" href="/assets/canal_start.html-DcFk0P4p.js" as="script"><link rel="prefetch" href="/assets/dataease_start.html-DB5sokVp.js" as="script"><link rel="prefetch" href="/assets/docsify_start.html-CKxRGALR.js" as="script"><link rel="prefetch" href="/assets/easyes_start.html-CZFAm_Ad.js" as="script"><link rel="prefetch" href="/assets/easyexcel_start.html-_gb8fbq9.js" as="script"><link rel="prefetch" href="/assets/easypoi_start.html-CIILmuVE.js" as="script"><link rel="prefetch" href="/assets/efk_fluent.html-KE_AMYiu.js" as="script"><link rel="prefetch" href="/assets/elastic_apm_start.html-BMXyRVf4.js" as="script"><link rel="prefetch" href="/assets/erupt_start.html-C0mBqetY.js" as="script"><link rel="prefetch" href="/assets/filebeat_start.html-CcUWtEFR.js" as="script"><link rel="prefetch" href="/assets/flyway_start.html-BxQ9FLA1.js" as="script"><link rel="prefetch" href="/assets/gaea.html-adNUu8Lb.js" as="script"><link rel="prefetch" href="/assets/gitlab_deploy_start.html-Dy7dt0qE.js" as="script"><link rel="prefetch" href="/assets/git_drone_start.html-6jloEmKK.js" as="script"><link rel="prefetch" href="/assets/grafana_start.html-DYhqlN--.js" as="script"><link rel="prefetch" href="/assets/harbor_start.html-DTPLVUue.js" as="script"><link rel="prefetch" href="/assets/hexo_start.html-Dx2h2y7H.js" as="script"><link rel="prefetch" href="/assets/jose_jwt_start.html-cDrIs6Aj.js" as="script"><link rel="prefetch" href="/assets/kafka_start.html-CnHQFuWe.js" as="script"><link rel="prefetch" href="/assets/keycloak_start.html-CjHp6H4P.js" as="script"><link rel="prefetch" href="/assets/kkfileview_start.html-COmgUbTi.js" as="script"><link rel="prefetch" href="/assets/liteflow_start.html-BgoXQGjt.js" as="script"><link rel="prefetch" href="/assets/loki_start.html-C1pf8Wgd.js" as="script"><link rel="prefetch" href="/assets/lowcode_engine_start.html-Bcv-dfG4.js" as="script"><link rel="prefetch" href="/assets/magic_api_start.html-Mmhth9h1.js" as="script"><link rel="prefetch" href="/assets/mall_kibana_start.html-BPA-p35q.js" as="script"><link rel="prefetch" href="/assets/mapstruct_start.html-CJgDwESI.js" as="script"><link rel="prefetch" href="/assets/maven_docker_fabric8.html-mTanJQy2.js" as="script"><link rel="prefetch" href="/assets/metabase_start.html-CryzUZP0.js" as="script"><link rel="prefetch" href="/assets/minio_console_start.html-CGy2LGZr.js" as="script"><link rel="prefetch" href="/assets/mybatis_plus_start.html-T_q7Mn9I.js" as="script"><link rel="prefetch" href="/assets/nginxconfig_start.html-Ba_Jj4lV.js" as="script"><link rel="prefetch" href="/assets/podman_start.html-QqRETbCI.js" as="script"><link rel="prefetch" href="/assets/portainer_start.html-BLsKYuA-.js" as="script"><link rel="prefetch" href="/assets/power_job_start.html-BdhjkzAb.js" as="script"><link rel="prefetch" href="/assets/pulsar_start.html-BDoAn6bp.js" as="script"><link rel="prefetch" href="/assets/quartz_start.html-D0I_5S2q.js" as="script"><link rel="prefetch" href="/assets/redis_new_character.html-C2gf2jEO.js" as="script"><link rel="prefetch" href="/assets/redis_om_start.html-CXhjMNNx.js" as="script"><link rel="prefetch" href="/assets/retrofit_start.html-Dz_5Fstr.js" as="script"><link rel="prefetch" href="/assets/sa_plus_start.html-BLGp7YVd.js" as="script"><link rel="prefetch" href="/assets/sa_token_start.html-CacBOis0.js" as="script"><link rel="prefetch" href="/assets/smart_doc_start.html-62KpSnjA.js" as="script"><link rel="prefetch" href="/assets/springdoc_start.html-DNWrUFlj.js" as="script"><link rel="prefetch" href="/assets/torna_start.html-Hkmn-XbI.js" as="script"><link rel="prefetch" href="/assets/vuepress_hope_start.html-BlnS8lIO.js" as="script"><link rel="prefetch" href="/assets/vuepress_start.html-Bj6CZ54r.js" as="script"><link rel="prefetch" href="/assets/yao_start.html-B8i6SuY3.js" as="script"><link rel="prefetch" href="/assets/yapi_start.html-CP9X4MQx.js" as="script"><link rel="prefetch" href="/assets/zookeeper_start.html-CXPrxll2.js" as="script"><link rel="prefetch" href="/assets/apifox_start.html-B1eVOfi4.js" as="script"><link rel="prefetch" href="/assets/beekeeper_studio.html-DkEe5acR.js" as="script"><link rel="prefetch" href="/assets/bytebase_start.html-DUSdEZ3B.js" as="script"><link rel="prefetch" href="/assets/chiner_start.html-C4uf0Rpx.js" as="script"><link rel="prefetch" href="/assets/cloud_toolkit_start.html-uFKfcZEn.js" as="script"><link rel="prefetch" href="/assets/cockpit_start.html-Co8U6Rmp.js" as="script"><link rel="prefetch" href="/assets/datagrip_start.html-BRKhSBsh.js" as="script"><link rel="prefetch" href="/assets/dbeaver_start.html-1HM6kAsD.js" as="script"><link rel="prefetch" href="/assets/gitlab.html-B3uxSmGM.js" as="script"><link rel="prefetch" href="/assets/idea.html-Ch_giIHa.js" as="script"><link rel="prefetch" href="/assets/idea_docker_plugin.html-CQKMoP6F.js" as="script"><link rel="prefetch" href="/assets/idea_git.html-CNenkiFf.js" as="script"><link rel="prefetch" href="/assets/idea_plugins.html-fWrW-c_g.js" as="script"><link rel="prefetch" href="/assets/idea_plugin_collection.html-Ca3yU7Ao.js" as="script"><link rel="prefetch" href="/assets/idea_plugin_mybatisx.html-DVzTN-gb.js" as="script"><link rel="prefetch" href="/assets/idea_springboot.html-9fYGxZni.js" as="script"><link rel="prefetch" href="/assets/json_tools.html-D8NrkZfR.js" as="script"><link rel="prefetch" href="/assets/marktext_start.html-B21Po_JM.js" as="script"><link rel="prefetch" href="/assets/mayfly_go_start.html-Da0Yz6-v.js" as="script"><link rel="prefetch" href="/assets/mdnice_start.html-qIYmZlS5.js" as="script"><link rel="prefetch" href="/assets/mysql_workbench.html-DSl-OeIP.js" as="script"><link rel="prefetch" href="/assets/my_debug_skill.html-wmmQk0ua.js" as="script"><link rel="prefetch" href="/assets/my_tools.html-DHSqhv5K.js" as="script"><link rel="prefetch" href="/assets/my_web_tools.html-81KPT5vb.js" as="script"><link rel="prefetch" href="/assets/navicat.html-DXMb9ive.js" as="script"><link rel="prefetch" href="/assets/navicat_designer.html-6xDOVfGO.js" as="script"><link rel="prefetch" href="/assets/ohmyzsh_start.html-BBn1X9lU.js" as="script"><link rel="prefetch" href="/assets/plant_uml_start.html-CgD1k3M3.js" as="script"><link rel="prefetch" href="/assets/postman.html-BFQ2rVK3.js" as="script"><link rel="prefetch" href="/assets/redis_desktop_start.html-BXGnA8AF.js" as="script"><link rel="prefetch" href="/assets/redis_insight_start.html-RSdukT-h.js" as="script"><link rel="prefetch" href="/assets/restful_fast_request.html-D0k4GsGz.js" as="script"><link rel="prefetch" href="/assets/sequence_diagram.html-Du3DtJCW.js" as="script"><link rel="prefetch" href="/assets/slidev_start.html-DNGLdKmd.js" as="script"><link rel="prefetch" href="/assets/swagger_postman.html-DCjH50iv.js" as="script"><link rel="prefetch" href="/assets/tabby_start.html-q7RwdysG.js" as="script"><link rel="prefetch" href="/assets/vscode_start.html-C_ZZENFM.js" as="script"><link rel="prefetch" href="/assets/yuque_start.html-CSMQ0GRH.js" as="script"><link rel="prefetch" href="/assets/zentao.html-DjMfRbo0.js" as="script"><link rel="prefetch" href="/assets/mall_arch_01.html-Dtpld2QS.js" as="script"><link rel="prefetch" href="/assets/mall_arch_02.html-D-onpEDE.js" as="script"><link rel="prefetch" href="/assets/mall_arch_03.html-SaOxW0fy.js" as="script"><link rel="prefetch" href="/assets/mall_arch_04.html-DoOqsb-K.js" as="script"><link rel="prefetch" href="/assets/mall_arch_05.html-D4TJMB-9.js" as="script"><link rel="prefetch" href="/assets/mall_arch_06.html-CzlpARn2.js" as="script"><link rel="prefetch" href="/assets/mall_arch_07.html-BZ76YXNG.js" as="script"><link rel="prefetch" href="/assets/mall_arch_08.html-CJp3jy08.js" as="script"><link rel="prefetch" href="/assets/mall_arch_09.html-CTGPaaST.js" as="script"><link rel="prefetch" href="/assets/mall_arch_10.html-BcYoVPKH.js" as="script"><link rel="prefetch" href="/assets/mall_arch_overview.html-C5-kHy-w.js" as="script"><link rel="prefetch" href="/assets/mall_business_app_overview.html-m9keX7R0.js" as="script"><link rel="prefetch" href="/assets/mall_business_overview.html-DqJ2Q7IC.js" as="script"><link rel="prefetch" href="/assets/mall_database_overview.html-4YoVWLPN.js" as="script"><link rel="prefetch" href="/assets/mall_dev_design.html-NYhSg60C.js" as="script"><link rel="prefetch" href="/assets/mall_oms_01.html-BAj-tX4w.js" as="script"><link rel="prefetch" href="/assets/mall_oms_02.html-Cm3T2ao1.js" as="script"><link rel="prefetch" href="/assets/mall_oms_03.html-JOmesdk3.js" as="script"><link rel="prefetch" href="/assets/mall_permission.html-BNuY7CGJ.js" as="script"><link rel="prefetch" href="/assets/mall_pms_01.html-1Re1HQrR.js" as="script"><link rel="prefetch" href="/assets/mall_pms_02.html-BCyCsGcr.js" as="script"><link rel="prefetch" href="/assets/mall_sms_01.html-C7eWG2SL.js" as="script"><link rel="prefetch" href="/assets/mall_sms_02.html-CHbFrstn.js" as="script"><link rel="prefetch" href="/assets/mall_sms_03.html-0TZzNnPV.js" as="script"><link rel="prefetch" href="/assets/mall_ums_01.html-BNat0Oea.js" as="script"><link rel="prefetch" href="/assets/docker_command.html-MbchlYaC.js" as="script"><link rel="prefetch" href="/assets/docker_compose.html-brPc81iy.js" as="script"><link rel="prefetch" href="/assets/docker_file.html-BAcTU5Nl.js" as="script"><link rel="prefetch" href="/assets/docker_maven.html-MXIt2ii3.js" as="script"><link rel="prefetch" href="/assets/gogs_start.html-DGFoTuk7.js" as="script"><link rel="prefetch" href="/assets/jenkins.html-BM1mJSaP.js" as="script"><link rel="prefetch" href="/assets/jenkins_vue.html-BFBOZ4or.js" as="script"><link rel="prefetch" href="/assets/linux_command.html-DlfmZm0O.js" as="script"><link rel="prefetch" href="/assets/linux_firewall.html-Dr0Qtp4c.js" as="script"><link rel="prefetch" href="/assets/linux_install.html-CB1TMnXO.js" as="script"><link rel="prefetch" href="/assets/mall_deploy_docker.html-DrRcdioc.js" as="script"><link rel="prefetch" href="/assets/mall_deploy_docker_compose.html-zgxPnW1u.js" as="script"><link rel="prefetch" href="/assets/mall_deploy_jenkins.html-C4I53Zb7.js" as="script"><link rel="prefetch" href="/assets/mall_deploy_overview.html-jKHfApuK.js" as="script"><link rel="prefetch" href="/assets/mall_swarm_deploy_docker.html-BqF4A7gI.js" as="script"><link rel="prefetch" href="/assets/mall_swarm_deploy_jenkins.html-jzUTqu-U.js" as="script"><link rel="prefetch" href="/assets/mall_swarm_deploy_k8s.html-BHaFbYvw.js" as="script"><link rel="prefetch" href="/assets/mall_swarm_deploy_windows.html-CG7LmFyO.js" as="script"><link rel="prefetch" href="/assets/mysql.html-BmqMZq74.js" as="script"><link rel="prefetch" href="/assets/mall_foreword_01.html-B8yIasoL.js" as="script"><link rel="prefetch" href="/assets/mall_foreword_02.html-jTJlrtUC.js" as="script"><link rel="prefetch" href="/assets/mall_foreword_03.html-DLtXNDPO.js" as="script"><link rel="prefetch" href="/assets/mall_foreword_04.html-iwuYddK0.js" as="script"><link rel="prefetch" href="/assets/mall_video.html-X2a_hzx-.js" as="script"><link rel="prefetch" href="/assets/mall_catalog.html-Bo68m91F.js" as="script"><link rel="prefetch" href="/assets/mall_deploy_web.html-53PP-ETN.js" as="script"><link rel="prefetch" href="/assets/mall_deploy_windows.html-BuhTbkZq.js" as="script"><link rel="prefetch" href="/assets/docker_protect_socket.html-8dO_0Xi-.js" as="script"><link rel="prefetch" href="/assets/elasticsearch_start.html-w4e1Cxq5.js" as="script"><link rel="prefetch" href="/assets/elk_security.html-B-ytZMWn.js" as="script"><link rel="prefetch" href="/assets/hutool_start.html-CvYWP2le.js" as="script"><link rel="prefetch" href="/assets/knife4j_start.html-DjhWr_U7.js" as="script"><link rel="prefetch" href="/assets/lombok_start.html-CU8jcIiO.js" as="script"><link rel="prefetch" href="/assets/mall_elk_advance.html-cr93Pv9q.js" as="script"><link rel="prefetch" href="/assets/mall_tiny_elk.html-CLp-jLmH.js" as="script"><link rel="prefetch" href="/assets/minio.html-BeLkpvTL.js" as="script"><link rel="prefetch" href="/assets/mongodb_start.html-DyY0GhXa.js" as="script"><link rel="prefetch" href="/assets/mybatis_generator_start.html-Ba6zTTSg.js" as="script"><link rel="prefetch" href="/assets/mybatis_start.html-CIQKuvgb.js" as="script"><link rel="prefetch" href="/assets/nginx.html-Cy_D-Pa2.js" as="script"><link rel="prefetch" href="/assets/rabbitmq_start.html-B5NKh6ha.js" as="script"><link rel="prefetch" href="/assets/springboot_annotation.html-DdjB4iZ8.js" as="script"><link rel="prefetch" href="/assets/springboot_auto_deploy.html-D-zqkEpv.js" as="script"><link rel="prefetch" href="/assets/springboot_start.html-t6TfrXWT.js" as="script"><link rel="prefetch" href="/assets/spring_data_redis.html-C5CfOXci.js" as="script"><link rel="prefetch" href="/assets/swagger_starter.html-D59KhlcA.js" as="script"><link rel="prefetch" href="/assets/aop_log.html-DK1TWZnI.js" as="script"><link rel="prefetch" href="/assets/elasticsearch_upgrade.html-COR0ODYx.js" as="script"><link rel="prefetch" href="/assets/gateway_cors.html-BNQcyHUa.js" as="script"><link rel="prefetch" href="/assets/java_stream.html-BcUwArwi.js" as="script"><link rel="prefetch" href="/assets/mall_permission_question.html-DIguFhi-.js" as="script"><link rel="prefetch" href="/assets/minio_use.html-DV9sroOP.js" as="script"><link rel="prefetch" href="/assets/mybatis_mapper.html-BhOkjund.js" as="script"><link rel="prefetch" href="/assets/permission_back.html-C5BVBs-F.js" as="script"><link rel="prefetch" href="/assets/permission_front.html-DznCa3v9.js" as="script"><link rel="prefetch" href="/assets/product_search.html-CegOl6fc.js" as="script"><link rel="prefetch" href="/assets/product_sku.html-C8Iok4o4.js" as="script"><link rel="prefetch" href="/assets/rabbitmq_delay.html-DReH2s_b.js" as="script"><link rel="prefetch" href="/assets/redis_permission.html-DBFl-AiF.js" as="script"><link rel="prefetch" href="/assets/springboot_cors.html-Dund3EFt.js" as="script"><link rel="prefetch" href="/assets/springboot_validator.html-CnXcZgOd.js" as="script"><link rel="prefetch" href="/assets/springsecurity_use.html-CeImFSI5.js" as="script"><link rel="prefetch" href="/assets/swagger_upgrade.html-q5_ec_oE.js" as="script"><link rel="prefetch" href="/assets/404.html-DrRGD7XG.js" as="script"><link rel="prefetch" href="/assets/index.html-ZawN40Zs.js" as="script"><link rel="prefetch" href="/assets/index.html-CI5EYOM0.js" as="script"><link rel="prefetch" href="/assets/index.html-EBvbVLvW.js" as="script"><link rel="prefetch" href="/assets/index.html-9yhHRa9U.js" as="script"><link rel="prefetch" href="/assets/index.html-C8W7v4Oz.js" as="script"><link rel="prefetch" href="/assets/index.html-DIW4U82G.js" as="script"><link rel="prefetch" href="/assets/index.html-t5omf7eS.js" as="script"><link rel="prefetch" href="/assets/index.html-DnL2PUAp.js" as="script"><link rel="prefetch" href="/assets/index.html-CffbHV3z.js" as="script"><link rel="prefetch" href="/assets/index.html-DV2vThjW.js" as="script"><link rel="prefetch" href="/assets/index.html-wq4wIkoC.js" as="script"><link rel="prefetch" href="/assets/index.html-M3MSJW7k.js" as="script"><link rel="prefetch" href="/assets/index.html-Bm3D71ys.js" as="script"><link rel="prefetch" href="/assets/index.html-1sTL5fWG.js" as="script"><link rel="prefetch" href="/assets/index.html-dd6JW89V.js" as="script"><link rel="prefetch" href="/assets/index.html-CW7GRjCd.js" as="script"><link rel="prefetch" href="/assets/index.html-D4Rm3cjr.js" as="script"><link rel="prefetch" href="/assets/index.html-BbKYPsFM.js" as="script"><link rel="prefetch" href="/assets/index.html-BS6n0m3R.js" as="script"><link rel="prefetch" href="/assets/index.html-D9tahhEa.js" as="script"><link rel="prefetch" href="/assets/index.html-CFrO8jQK.js" as="script"><link rel="prefetch" href="/assets/index.html-BlJmqOCZ.js" as="script"><link rel="prefetch" href="/assets/index.html-BSi0X0Lm.js" as="script"><link rel="prefetch" href="/assets/index.html-Cgb3M8_8.js" as="script"><link rel="prefetch" href="/assets/index.html-BEyJBSE6.js" as="script"><link rel="prefetch" href="/assets/index.html-bjrQkD5H.js" as="script"><link rel="prefetch" href="/assets/index.html-BoqTDTOW.js" as="script"><link rel="prefetch" href="/assets/index.html-lleveZ9y.js" as="script"><link rel="prefetch" href="/assets/index.html-r_FZDLiE.js" as="script"><link rel="prefetch" href="/assets/index.html-BvCuAkPe.js" as="script"><link rel="prefetch" href="/assets/index.html-DF9wNyAm.js" as="script"><link rel="prefetch" href="/assets/index.html-Cmm1WKyO.js" as="script"><link rel="prefetch" href="/assets/index.html-MKiwu2-l.js" as="script"><link rel="prefetch" href="/assets/index.html-iOwpf61b.js" as="script"><link rel="prefetch" href="/assets/index.html-CilHPiSE.js" as="script"><link rel="prefetch" href="/assets/index.html-DxsziZ2o.js" as="script"><link rel="prefetch" href="/assets/index.html-Di70bN4h.js" as="script"><link rel="prefetch" href="/assets/index.html-BEsODoeD.js" as="script"><link rel="prefetch" href="/assets/index.html-wRDq2Cuc.js" as="script"><link rel="prefetch" href="/assets/index.html-Bh1ADtdZ.js" as="script"><link rel="prefetch" href="/assets/index.html-BQsupvMN.js" as="script"><link rel="prefetch" href="/assets/index.html-DSj_vGMj.js" as="script"><link rel="prefetch" href="/assets/index.html-Ddr2iRIv.js" as="script"><link rel="prefetch" href="/assets/index.html-Bz73j0yf.js" as="script"><link rel="prefetch" href="/assets/index.html-DLfAeT02.js" as="script"><link rel="prefetch" href="/assets/index.html-D4sQemB4.js" as="script"><link rel="prefetch" href="/assets/index.html-CNT47383.js" as="script"><link rel="prefetch" href="/assets/index.html-08aGG0xC.js" as="script"><link rel="prefetch" href="/assets/index.html-DVY8HqDI.js" as="script"><link rel="prefetch" href="/assets/index.html-CRB1CWGE.js" as="script"><link rel="prefetch" href="/assets/index.html-DHG4xyKb.js" as="script"><link rel="prefetch" href="/assets/index.html-CHZCyFEp.js" as="script"><link rel="prefetch" href="/assets/index.html-v1bZzGut.js" as="script"><link rel="prefetch" href="/assets/index.html-B5EY1tW_.js" as="script"><link rel="prefetch" href="/assets/index.html-Cg44bKl4.js" as="script"><link rel="prefetch" href="/assets/index.html-3m56SdDh.js" as="script"><link rel="prefetch" href="/assets/index.html-CkI1rQds.js" as="script"><link rel="prefetch" href="/assets/index.html-CRzn904K.js" as="script"><link rel="prefetch" href="/assets/index.html-DnWhTa86.js" as="script"><link rel="prefetch" href="/assets/index.html-D_kq35hm.js" as="script"><link rel="prefetch" href="/assets/index.html-C1vs_xf_.js" as="script"><link rel="prefetch" href="/assets/index.html-DEbwfvxt.js" as="script"><link rel="prefetch" href="/assets/index.html-DZcbLAbo.js" as="script"><link rel="prefetch" href="/assets/index.html-DkS4WKgI.js" as="script"><link rel="prefetch" href="/assets/index.html-JOJj5sGu.js" as="script"><link rel="prefetch" href="/assets/index.html-6o3DD7qp.js" as="script"><link rel="prefetch" href="/assets/index.html-h-iKtVjq.js" as="script"><link rel="prefetch" href="/assets/index.html-DbAEIOMQ.js" as="script"><link rel="prefetch" href="/assets/index.html-08cjnu0i.js" as="script"><link rel="prefetch" href="/assets/index.html-C0oAFRyF.js" as="script"><link rel="prefetch" href="/assets/index.html-Bgj5_gZJ.js" as="script"><link rel="prefetch" href="/assets/index.html-Cf7S_qra.js" as="script"><link rel="prefetch" href="/assets/index.html-D3cELRj3.js" as="script"><link rel="prefetch" href="/assets/index.html-D7skioS_.js" as="script"><link rel="prefetch" href="/assets/index.html-CtGb74dk.js" as="script"><link rel="prefetch" href="/assets/index.html-CrKL8_di.js" as="script"><link rel="prefetch" href="/assets/index.html-CCn2wMSP.js" as="script"><link rel="prefetch" href="/assets/index.html-tV380hxH.js" as="script"><link rel="prefetch" href="/assets/index.html-BAep4TtH.js" as="script"><link rel="prefetch" href="/assets/index.html-BeWWgArQ.js" as="script"><link rel="prefetch" href="/assets/index.html-waA6dqng.js" as="script"><link rel="prefetch" href="/assets/index.html-Be8P7Vnv.js" as="script"><link rel="prefetch" href="/assets/index.html-lVEjUEFv.js" as="script"><link rel="prefetch" href="/assets/index.html-CnRpZ1pe.js" as="script"><link rel="prefetch" href="/assets/index.html-DrebEFru.js" as="script"><link rel="prefetch" href="/assets/index.html-BLZ__jwU.js" as="script"><link rel="prefetch" href="/assets/index.html-BK7u9z7j.js" as="script"><link rel="prefetch" href="/assets/index.html-CQMN41pv.js" as="script"><link rel="prefetch" href="/assets/index.html-CkfCgH5X.js" as="script"><link rel="prefetch" href="/assets/index.html-CLYjAzlh.js" as="script"><link rel="prefetch" href="/assets/index.html-Csw9sgpC.js" as="script"><link rel="prefetch" href="/assets/index.html-HzklLMg-.js" as="script"><link rel="prefetch" href="/assets/index.html-CrxzmzBN.js" as="script"><link rel="prefetch" href="/assets/index.html-a5tbKzoU.js" as="script"><link rel="prefetch" href="/assets/index.html-BZKE0aOk.js" as="script"><link rel="prefetch" href="/assets/index.html-mfQTwQpq.js" as="script"><link rel="prefetch" href="/assets/index.html-DHL0GgPC.js" as="script"><link rel="prefetch" href="/assets/index.html-BJtA8nUN.js" as="script"><link rel="prefetch" href="/assets/index.html-BypD6UJf.js" as="script"><link rel="prefetch" href="/assets/index.html-Bhxw7hLm.js" as="script"><link rel="prefetch" href="/assets/photoswipe.esm-GXRgw7eJ.js" as="script"><link rel="prefetch" href="/assets/SearchResult-BseVC1PE.js" as="script"> </head> <body> <div id="app"><!--[--><!--[--><!--[--><span tabindex="-1"></span><a href="#main-content" class="vp-skip-link sr-only">跳至主要內容</a><!--]--><!--[--><div class="theme-container external-link-icon has-toc"><!--[--><header id="navbar" class="vp-navbar"><div class="vp-navbar-start"><button type="button" class="vp-toggle-sidebar-button" title="Toggle Sidebar"><span class="icon"></span></button><!----><!--[--><a class="route-link vp-brand" href="/"><img class="vp-nav-logo" src="/logo.svg" alt><!----><span class="vp-site-name hide-in-pad">mall学习教程</span></a><!--]--><!----></div><div class="vp-navbar-center"><!----><!--[--><nav class="vp-nav-links"><div class="vp-nav-item hide-in-mobile"><a class="route-link auto-link" href="/" aria-label="项目主页"><!--[--><span class="font-icon icon iconfont icon-home" style=""></span><!--]-->项目主页<!----></a></div><div class="vp-nav-item hide-in-mobile"><div class="vp-dropdown-wrapper"><button type="button" class="vp-dropdown-title" aria-label="在线体验"><!--[--><span class="font-icon icon iconfont icon-stack" style=""></span>在线体验<!--]--><span class="arrow"></span><ul class="vp-dropdown"><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://www.macrozheng.com/admin/index.html" aria-label="后台管理" rel="noopener noreferrer" target="_blank"><!---->后台管理<!----></a></li><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://www.macrozheng.com/app/" aria-label="移动端" rel="noopener noreferrer" target="_blank"><!---->移动端<!----></a></li></ul></button></div></div><div class="vp-nav-item hide-in-mobile"><div class="vp-dropdown-wrapper"><button type="button" class="vp-dropdown-title" aria-label="项目地址"><!--[--><span class="font-icon icon iconfont icon-type" style=""></span>项目地址<!--]--><span class="arrow"></span><ul class="vp-dropdown"><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://github.com/macrozheng/mall" aria-label="后端项目" rel="noopener noreferrer" target="_blank"><!---->后端项目<!----></a></li><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://github.com/macrozheng/mall-swarm" aria-label="微服务项目" rel="noopener noreferrer" target="_blank"><!---->微服务项目<!----></a></li><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://github.com/macrozheng/mall-admin-web" aria-label="后台管理系统" rel="noopener noreferrer" target="_blank"><!---->后台管理系统<!----></a></li><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://github.com/macrozheng/mall-app-web" aria-label="前台商城项目" rel="noopener noreferrer" target="_blank"><!---->前台商城项目<!----></a></li><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://github.com/macrozheng/mall-learning" aria-label="学习教程" rel="noopener noreferrer" target="_blank"><!---->学习教程<!----></a></li><li class="vp-dropdown-item"><a class="auto-link external-link" href="https://github.com/macrozheng/mall-tiny" aria-label="项目骨架" rel="noopener noreferrer" target="_blank"><!---->项目骨架<!----></a></li></ul></button></div></div><div class="vp-nav-item hide-in-mobile"><a class="auto-link external-link" href="https://cloud.macrozheng.com" aria-label="微服务学习教程" rel="noopener noreferrer" target="_blank"><!--[--><span class="font-icon icon iconfont icon-launch" style=""></span><!--]-->微服务学习教程<!----></a></div><div class="vp-nav-item hide-in-mobile"><div class="vp-dropdown-wrapper"><button type="button" class="vp-dropdown-title" aria-label="更多系列"><!--[--><span class="font-icon icon iconfont icon-list" style=""></span>更多系列<!--]--><span class="arrow"></span><ul class="vp-dropdown"><li class="vp-dropdown-item"><a class="route-link auto-link" href="/roadmap/mall_milestone_40k.html" aria-label="开源之路"><!--[--><span class="font-icon icon iconfont icon-gitee" style=""></span><!--]-->开源之路<!----></a></li><li class="vp-dropdown-item"><a class="route-link auto-link" href="/project/gaea.html" aria-label="开源项目精选"><!--[--><span class="font-icon icon iconfont icon-hot" style=""></span><!--]-->开源项目精选<!----></a></li><li class="vp-dropdown-item"><a class="route-link auto-link" href="/tool/idea.html" aria-label="开发工具推荐"><!--[--><span class="font-icon icon iconfont icon-shell" style=""></span><!--]-->开发工具推荐<!----></a></li><li class="vp-dropdown-item"><a class="route-link auto-link" href="/cloud/cloud_catalog.html" aria-label="SpringCloud学习教程"><!--[--><span class="font-icon icon iconfont icon-cache" style=""></span><!--]-->SpringCloud学习教程<!----></a></li><li class="vp-dropdown-item"><a class="route-link auto-link" href="/k8s/k8s_catalog.html" aria-label="K8S学习教程"><!--[--><span class="font-icon icon iconfont icon-launch" style=""></span><!--]-->K8S学习教程<!----></a></li></ul></button></div></div></nav><!--]--><!----></div><div class="vp-navbar-end"><!----><!--[--><!----><div class="vp-nav-item vp-action"><a class="vp-action-link" href="https://github.com/macrozheng" target="_blank" rel="noopener noreferrer" aria-label="GitHub"><svg xmlns="http://www.w3.org/2000/svg" class="icon github-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="github icon" name="github" style="width:1.25rem;height:1.25rem;vertical-align:middle;"><path d="M511.957 21.333C241.024 21.333 21.333 240.981 21.333 512c0 216.832 140.544 400.725 335.574 465.664 24.49 4.395 32.256-10.07 32.256-23.083 0-11.69.256-44.245 0-85.205-136.448 29.61-164.736-64.64-164.736-64.64-22.315-56.704-54.4-71.765-54.4-71.765-44.587-30.464 3.285-29.824 3.285-29.824 49.195 3.413 75.179 50.517 75.179 50.517 43.776 75.008 114.816 53.333 142.762 40.79 4.523-31.66 17.152-53.377 31.19-65.537-108.971-12.458-223.488-54.485-223.488-242.602 0-53.547 19.114-97.323 50.517-131.67-5.035-12.33-21.93-62.293 4.779-129.834 0 0 41.258-13.184 134.912 50.346a469.803 469.803 0 0 1 122.88-16.554c41.642.213 83.626 5.632 122.88 16.554 93.653-63.488 134.784-50.346 134.784-50.346 26.752 67.541 9.898 117.504 4.864 129.834 31.402 34.347 50.474 78.123 50.474 131.67 0 188.586-114.73 230.016-224.042 242.09 17.578 15.232 33.578 44.672 33.578 90.454v135.85c0 13.142 7.936 27.606 32.854 22.87C862.25 912.597 1002.667 728.747 1002.667 512c0-271.019-219.648-490.667-490.71-490.667z"></path></svg></a></div><div class="vp-nav-item hide-in-mobile"><button type="button" class="vp-outlook-button" tabindex="-1" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" class="icon outlook-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="outlook icon" name="outlook"><path d="M224 800c0 9.6 3.2 44.8 6.4 54.4 6.4 48-48 76.8-48 76.8s80 41.6 147.2 0 134.4-134.4 38.4-195.2c-22.4-12.8-41.6-19.2-57.6-19.2C259.2 716.8 227.2 761.6 224 800zM560 675.2l-32 51.2c-51.2 51.2-83.2 32-83.2 32 25.6 67.2 0 112-12.8 128 25.6 6.4 51.2 9.6 80 9.6 54.4 0 102.4-9.6 150.4-32l0 0c3.2 0 3.2-3.2 3.2-3.2 22.4-16 12.8-35.2 6.4-44.8-9.6-12.8-12.8-25.6-12.8-41.6 0-54.4 60.8-99.2 137.6-99.2 6.4 0 12.8 0 22.4 0 12.8 0 38.4 9.6 48-25.6 0-3.2 0-3.2 3.2-6.4 0-3.2 3.2-6.4 3.2-6.4 6.4-16 6.4-16 6.4-19.2 9.6-35.2 16-73.6 16-115.2 0-105.6-41.6-198.4-108.8-268.8C704 396.8 560 675.2 560 675.2zM224 419.2c0-28.8 22.4-51.2 51.2-51.2 28.8 0 51.2 22.4 51.2 51.2 0 28.8-22.4 51.2-51.2 51.2C246.4 470.4 224 448 224 419.2zM320 284.8c0-22.4 19.2-41.6 41.6-41.6 22.4 0 41.6 19.2 41.6 41.6 0 22.4-19.2 41.6-41.6 41.6C339.2 326.4 320 307.2 320 284.8zM457.6 208c0-12.8 12.8-25.6 25.6-25.6 12.8 0 25.6 12.8 25.6 25.6 0 12.8-12.8 25.6-25.6 25.6C470.4 233.6 457.6 220.8 457.6 208zM128 505.6C128 592 153.6 672 201.6 736c28.8-60.8 112-60.8 124.8-60.8-16-51.2 16-99.2 16-99.2l316.8-422.4c-48-19.2-99.2-32-150.4-32C297.6 118.4 128 291.2 128 505.6zM764.8 86.4c-22.4 19.2-390.4 518.4-390.4 518.4-22.4 28.8-12.8 76.8 22.4 99.2l9.6 6.4c35.2 22.4 80 12.8 99.2-25.6 0 0 6.4-12.8 9.6-19.2 54.4-105.6 275.2-524.8 288-553.6 6.4-19.2-3.2-32-19.2-32C777.6 76.8 771.2 80 764.8 86.4z"></path></svg><div class="vp-outlook-dropdown"><!----></div></button></div><!--[--><button type="button" class="search-pro-button" aria-label="搜索"><svg xmlns="http://www.w3.org/2000/svg" class="icon search-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="search icon" name="search"><path d="M192 480a256 256 0 1 1 512 0 256 256 0 0 1-512 0m631.776 362.496-143.2-143.168A318.464 318.464 0 0 0 768 480c0-176.736-143.264-320-320-320S128 303.264 128 480s143.264 320 320 320a318.016 318.016 0 0 0 184.16-58.592l146.336 146.368c12.512 12.48 32.768 12.48 45.28 0 12.48-12.512 12.48-32.768 0-45.28"></path></svg><div class="search-pro-placeholder">搜索</div><div class="search-pro-key-hints"><kbd class="search-pro-key">Ctrl</kbd><kbd class="search-pro-key">K</kbd></div></button><!--]--><!--]--><!----><button type="button" class="vp-toggle-navbar-button" aria-label="Toggle Navbar" aria-expanded="false" aria-controls="nav-screen"><span><span class="vp-top"></span><span class="vp-middle"></span><span class="vp-bottom"></span></span></button></div></header><!----><!--]--><!----><div class="toggle-sidebar-wrapper"><span class="arrow start"></span></div><aside id="sidebar" class="vp-sidebar"><!----><ul class="vp-sidebar-links"><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><span class="font-icon icon iconfont icon-flow" style=""></span><span class="vp-sidebar-title">序章</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><a class="route-link auto-link vp-sidebar-link" href="/mall/foreword/mall_video.html" aria-label="mall视频教程"><!---->mall视频教程<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/foreword/mall_foreword_01.html" aria-label="mall项目架构及功能概览"><!---->mall项目架构及功能概览<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/foreword/mall_foreword_02.html" aria-label="mall项目核心功能演示"><!---->mall项目核心功能演示<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/foreword/mall_foreword_03.html" aria-label="mall项目学习所需知识点"><!---->mall项目学习所需知识点<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/foreword/mall_foreword_04.html" aria-label="mall项目学习思路及课程介绍"><!---->mall项目学习思路及课程介绍<!----></a></li></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><span class="font-icon icon iconfont icon-launch" style=""></span><span class="vp-sidebar-title">快速上手</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><a class="route-link auto-link vp-sidebar-link" href="/mall/start/mall_deploy_windows.html" aria-label="mall项目后端开发环境搭建"><!---->mall项目后端开发环境搭建<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/start/mall_deploy_web.html" aria-label="mall项目前端开发环境搭建"><!---->mall项目前端开发环境搭建<!----></a></li></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><span class="font-icon icon iconfont icon-stack" style=""></span><span class="vp-sidebar-title">架构篇</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_overview.html" aria-label="mall项目架构篇介绍"><!---->mall项目架构篇介绍<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_01.html" aria-label="mall整合SpringBoot+MyBatis搭建基本框架"><!---->mall整合SpringBoot+MyBatis搭建基本框架<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_02.html" aria-label="mall整合Swagger实现在线API文档"><!---->mall整合Swagger实现在线API文档<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_03.html" aria-label="mall整合Redis实现缓存功能"><!---->mall整合Redis实现缓存功能<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_04.html" aria-label="mall整合SpringSecurity和JWT实现认证和授权(一)"><!---->mall整合SpringSecurity和JWT实现认证和授权(一)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_05.html" aria-label="mall整合SpringSecurity和JWT实现认证和授权(二)"><!---->mall整合SpringSecurity和JWT实现认证和授权(二)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_06.html" aria-label="mall整合SpringTask实现定时任务"><!---->mall整合SpringTask实现定时任务<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_07.html" aria-label="mall整合Elasticsearch实现商品搜索"><!---->mall整合Elasticsearch实现商品搜索<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_08.html" aria-label="mall整合MongoDB实现文档操作"><!---->mall整合MongoDB实现文档操作<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_09.html" aria-label="mall整合RabbitMQ实现延迟消息"><!---->mall整合RabbitMQ实现延迟消息<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/architect/mall_arch_10.html" aria-label="mall整合OSS实现文件上传"><!---->mall整合OSS实现文件上传<!----></a></li></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><span class="font-icon icon iconfont icon-layout" style=""></span><span class="vp-sidebar-title">业务篇</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_business_overview.html" aria-label="mall项目后台管理系统业务介绍"><!---->mall项目后台管理系统业务介绍<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_business_app_overview.html" aria-label="mall项目前台商城系统业务介绍"><!---->mall项目前台商城系统业务介绍<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_dev_design.html" aria-label="mall项目开发设计思路"><!---->mall项目开发设计思路<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_ums_01.html" aria-label="权限模块数据库表解析"><!---->权限模块数据库表解析<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_pms_01.html" aria-label="商品模块数据库表解析(一)"><!---->商品模块数据库表解析(一)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_pms_02.html" aria-label="商品模块数据库表解析(二)"><!---->商品模块数据库表解析(二)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_oms_01.html" aria-label="订单模块数据库表解析(一)"><!---->订单模块数据库表解析(一)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_oms_02.html" aria-label="订单模块数据库表解析(二)"><!---->订单模块数据库表解析(二)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_oms_03.html" aria-label="订单模块数据库表解析(三)"><!---->订单模块数据库表解析(三)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_sms_01.html" aria-label="营销模块数据库表解析(一)"><!---->营销模块数据库表解析(一)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_sms_02.html" aria-label="营销模块数据库表解析(二)"><!---->营销模块数据库表解析(二)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/database/mall_sms_03.html" aria-label="营销模块数据库表解析(三)"><!---->营销模块数据库表解析(三)<!----></a></li></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><span class="font-icon icon iconfont icon-ci" style=""></span><span class="vp-sidebar-title">部署篇</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/mall_deploy_overview.html" aria-label="mall项目部署篇介绍"><!---->mall项目部署篇介绍<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/linux_install.html" aria-label="使用虚拟机安装Linux"><!---->使用虚拟机安装Linux<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/linux_command.html" aria-label="Linux常用命令"><!---->Linux常用命令<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/linux_firewall.html" aria-label="Linux防火墙Firewall和Iptables的使用"><!---->Linux防火墙Firewall和Iptables的使用<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/docker_command.html" aria-label="Docker环境安装及常用命令"><!---->Docker环境安装及常用命令<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/docker_maven.html" aria-label="使用Maven插件为SpringBoot应用构建Docker镜像"><!---->使用Maven插件为SpringBoot应用构建Docker镜像<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/docker_file.html" aria-label="使用Dockerfile为SpringBoot应用构建Docker镜像"><!---->使用Dockerfile为SpringBoot应用构建Docker镜像<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/docker_compose.html" aria-label="使用Docker Compose部署SpringBoot应用"><!---->使用Docker Compose部署SpringBoot应用<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/mysql.html" aria-label="MySQL常用命令"><!---->MySQL常用命令<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/mall_deploy_docker.html" aria-label="mall在Linux环境下的部署(基于Docker容器)"><!---->mall在Linux环境下的部署(基于Docker容器)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/mall_deploy_docker_compose.html" aria-label="mall在Linux环境下的部署(基于Docker Compose)"><!---->mall在Linux环境下的部署(基于Docker Compose)<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/gogs_start.html" aria-label="在Linux上搭建Git服务"><!---->在Linux上搭建Git服务<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/jenkins.html" aria-label="使用Jenkins一键打包部署SpringBoot应用"><!---->使用Jenkins一键打包部署SpringBoot应用<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/jenkins_vue.html" aria-label="使用Jenkins一键打包部署前端应用"><!---->使用Jenkins一键打包部署前端应用<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/deploy/mall_deploy_jenkins.html" aria-label="mall使用Jenkins实现自动化部署"><!---->mall使用Jenkins实现自动化部署<!----></a></li></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable" type="button"><span class="font-icon icon iconfont icon-page" style=""></span><span class="vp-sidebar-title">技术要点篇</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/mybatis_mapper.html" aria-label="MyBatis Generator使用过程中踩过的一个坑"><!---->MyBatis Generator使用过程中踩过的一个坑<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/aop_log.html" aria-label="SpringBoot应用中使用AOP记录接口访问日志"><!---->SpringBoot应用中使用AOP记录接口访问日志<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/springboot_cors.html" aria-label="前后端分离项目,如何解决跨域问题"><!---->前后端分离项目,如何解决跨域问题<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/java_stream.html" aria-label="Java 8都出那么久了,Stream API了解下?"><!---->Java 8都出那么久了,Stream API了解下?<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/springsecurity_use.html" aria-label="仅需四步,整合SpringSecurity+JWT实现登录认证 !"><!---->仅需四步,整合SpringSecurity+JWT实现登录认证 !<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/minio_use.html" aria-label="前后端分离项目,如何优雅实现文件存储!"><!---->前后端分离项目,如何优雅实现文件存储!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/permission_back.html" aria-label="手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!"><!---->手把手教你搞定权限管理,结合Spring Security实现接口的动态权限控制!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/permission_front.html" aria-label="手把手教你搞定权限管理,结合Vue实现菜单的动态权限控制!"><!---->手把手教你搞定权限管理,结合Vue实现菜单的动态权限控制!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/product_sku.html" aria-label="商品SKU功能设计与优化"><!---->商品SKU功能设计与优化<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/springboot_validator.html" aria-label="SpringBoot中处理校验逻辑的两种方式,真的很机智!"><!---->SpringBoot中处理校验逻辑的两种方式,真的很机智!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/redis_permission.html" aria-label="使用Redis+AOP优化权限管理功能,这波操作贼爽!"><!---->使用Redis+AOP优化权限管理功能,这波操作贼爽!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/product_search.html" aria-label="Elasticsearch项目实战,商品搜索功能设计与实现!"><!---->Elasticsearch项目实战,商品搜索功能设计与实现!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/rabbitmq_delay.html" aria-label="RabbitMQ实现延迟消息居然如此简单,整个插件就完事了!"><!---->RabbitMQ实现延迟消息居然如此简单,整个插件就完事了!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/swagger_upgrade.html" aria-label="给Swagger升级了新版本,没想到居然有这么多坑!"><!---->给Swagger升级了新版本,没想到居然有这么多坑!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/elasticsearch_upgrade.html" aria-label="Elasticsearch 升级 7.x 版本后,我感觉掉坑里了!"><!---->Elasticsearch 升级 7.x 版本后,我感觉掉坑里了!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/technology/mall_permission_question.html" aria-label="搞定Mall项目中的权限管理功能,弄懂这些问题就妥了!"><!---->搞定Mall项目中的权限管理功能,弄懂这些问题就妥了!<!----></a></li></ul></section></li><li><section class="vp-sidebar-group"><button class="vp-sidebar-header clickable active" type="button"><span class="font-icon icon iconfont icon-blog" style=""></span><span class="vp-sidebar-title">参考篇</span><span class="vp-arrow down"></span></button><ul class="vp-sidebar-links"><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/hutool_start.html" aria-label="不要再重复造轮子了,这款开源工具类库贼好使!"><!---->不要再重复造轮子了,这款开源工具类库贼好使!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/nginx.html" aria-label="Nginx的这些妙用,你肯定有不知道的!"><!---->Nginx的这些妙用,你肯定有不知道的!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/minio.html" aria-label="Github标星19K+Star,10分钟自建对象存储服务!"><!---->Github标星19K+Star,10分钟自建对象存储服务!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/spring_data_redis.html" aria-label="Spring Data Redis 最佳实践!"><!---->Spring Data Redis 最佳实践!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/elasticsearch_start.html" aria-label="Elasticsearch快速入门,掌握这些刚刚好!"><!---->Elasticsearch快速入门,掌握这些刚刚好!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/mongodb_start.html" aria-label="MongoDB快速入门,掌握这些刚刚好!"><!---->MongoDB快速入门,掌握这些刚刚好!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/springboot_auto_deploy.html" aria-label="我常用的自动化部署技巧,贼好用,推荐给大家!"><!---->我常用的自动化部署技巧,贼好用,推荐给大家!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/rabbitmq_start.html" aria-label="连RabbitMQ的5种核心消息模式都不懂,也敢说自己会用消息队列!"><!---->连RabbitMQ的5种核心消息模式都不懂,也敢说自己会用消息队列!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/mall_tiny_elk.html" aria-label="SpringBoot应用整合ELK实现日志收集"><!---->SpringBoot应用整合ELK实现日志收集<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/mall_elk_advance.html" aria-label="你居然还去服务器上捞日志,搭个日志收集系统难道不香么!"><!---->你居然还去服务器上捞日志,搭个日志收集系统难道不香么!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/knife4j_start.html" aria-label="给Swagger换了个新皮肤,瞬间高大上了!"><!---->给Swagger换了个新皮肤,瞬间高大上了!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/docker_protect_socket.html" aria-label="Docker服务开放了这个端口,服务器分分钟变肉机!"><!---->Docker服务开放了这个端口,服务器分分钟变肉机!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/elk_security.html" aria-label="居然有人想白嫖我的日志,赶紧开启安全保护压压惊!"><!---->居然有人想白嫖我的日志,赶紧开启安全保护压压惊!<!----></a></li><li><a class="route-link route-link-active auto-link vp-sidebar-link active" href="/mall/reference/nginx_https_start.html" aria-label="Nginx如何支持HTTPS?手把手教贼简单!"><!---->Nginx如何支持HTTPS?手把手教贼简单!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/swagger_starter.html" aria-label="还在手动整合Swagger?Swagger官方Starter是真的香!"><!---->还在手动整合Swagger?Swagger官方Starter是真的香!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/springboot_start.html" aria-label="肝了一周总结的SpringBoot实战教程,太实用了!"><!---->肝了一周总结的SpringBoot实战教程,太实用了!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/mybatis_generator_start.html" aria-label="解放双手!MyBatis官方代码生成工具给力!"><!---->解放双手!MyBatis官方代码生成工具给力!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/lombok_start.html" aria-label="Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!"><!---->Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/mybatis_start.html" aria-label="MyBatis这样用,同事直呼哇塞,堪称最佳实践!"><!---->MyBatis这样用,同事直呼哇塞,堪称最佳实践!<!----></a></li><li><a class="route-link auto-link vp-sidebar-link" href="/mall/reference/springboot_annotation.html" aria-label="肝了一周总结的SpringBoot常用注解大全,看完就炉火纯青了!"><!---->肝了一周总结的SpringBoot常用注解大全,看完就炉火纯青了!<!----></a></li></ul></section></li></ul><!----></aside><!--[--><main id="main-content" class="vp-page"><!--[--><!--[--><div class="theme-hope-content" style="margin-top:20px;margin-bottom:-30px;"><p>学习不走弯路,通过<a href="https://www.macrozheng.com/mall/foreword/mall_video.html">《mall视频教程(最新版)》</a>,使用更系统、高效的方式来学习mall电商实战项目吧!</p></div><!--]--><!----><nav class="vp-breadcrumb disable"></nav><div class="vp-page-title"><h1><!---->Nginx如何支持HTTPS?手把手教贼简单!</h1><div class="page-info"><span class="page-author-info" aria-label="作者🖊" data-balloon-pos="up"><svg xmlns="http://www.w3.org/2000/svg" class="icon author-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="author icon" name="author"><path d="M649.6 633.6c86.4-48 147.2-144 147.2-249.6 0-160-128-288-288-288s-288 128-288 288c0 108.8 57.6 201.6 147.2 249.6-121.6 48-214.4 153.6-240 288-3.2 9.6 0 19.2 6.4 25.6 3.2 9.6 12.8 12.8 22.4 12.8h704c9.6 0 19.2-3.2 25.6-12.8 6.4-6.4 9.6-16 6.4-25.6-25.6-134.4-121.6-240-243.2-288z"></path></svg><span><a class="page-author-item" href="https://www.macrozheng.com" target="_blank" rel="noopener noreferrer">macrozheng</a></span><span property="author" content="macrozheng"></span></span><span class="page-category-info" aria-label="分类🌈" data-balloon-pos="up"><svg xmlns="http://www.w3.org/2000/svg" class="icon category-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="category icon" name="category"><path d="M148.41 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H148.41c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.311-40.31zM147.556 553.478H429.73c22.263 0 40.311 18.048 40.311 40.31v282.176c0 22.263-18.048 40.312-40.31 40.312H147.555c-22.263 0-40.311-18.049-40.311-40.312V593.79c0-22.263 18.048-40.311 40.31-40.311zM593.927 106.992h282.176c22.263 0 40.31 18.048 40.31 40.31V429.48c0 22.263-18.047 40.31-40.31 40.31H593.927c-22.263 0-40.311-18.047-40.311-40.31V147.302c0-22.263 18.048-40.31 40.31-40.31zM730.22 920.502H623.926c-40.925 0-74.22-33.388-74.22-74.425V623.992c0-41.038 33.387-74.424 74.425-74.424h222.085c41.038 0 74.424 33.226 74.424 74.067v114.233c0 10.244-8.304 18.548-18.547 18.548s-18.548-8.304-18.548-18.548V623.635c0-20.388-16.746-36.974-37.33-36.974H624.13c-20.585 0-37.331 16.747-37.331 37.33v222.086c0 20.585 16.654 37.331 37.126 37.331H730.22c10.243 0 18.547 8.304 18.547 18.547 0 10.244-8.304 18.547-18.547 18.547z"></path></svg><!--[--><span class="page-category-item color8 clickable" role="navigation">mall学习教程</span><span class="page-category-item color8 clickable" role="navigation">参考篇</span><!--]--><meta property="articleSection" content="mall学习教程,参考篇"></span><span class="page-tag-info" aria-label="标签🏷" data-balloon-pos="up"><svg xmlns="http://www.w3.org/2000/svg" class="icon tag-icon" viewBox="0 0 1024 1024" fill="currentColor" aria-label="tag icon" name="tag"><path d="M939.902 458.563L910.17 144.567c-1.507-16.272-14.465-29.13-30.737-30.737L565.438 84.098h-.402c-3.215 0-5.726 1.005-7.634 2.913l-470.39 470.39a10.004 10.004 0 000 14.164l365.423 365.424c1.909 1.908 4.42 2.913 7.132 2.913s5.223-1.005 7.132-2.913l470.39-470.39c2.01-2.11 3.014-5.023 2.813-8.036zm-240.067-72.121c-35.458 0-64.286-28.828-64.286-64.286s28.828-64.285 64.286-64.285 64.286 28.828 64.286 64.285-28.829 64.286-64.286 64.286z"></path></svg><!--[--><span class="page-tag-item color7 clickable" role="navigation">Nginx</span><!--]--><meta property="keywords" content="Nginx"></span></div><hr></div><div class="vp-toc-placeholder"><aside id="toc"><!----><div class="vp-toc-header">此页内容<!----><div class="arrow end"></div></div><div class="vp-toc-wrapper"><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level2" href="#生成ssl自签名证书">生成SSL自签名证书</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level2" href="#nginx支持https">Nginx支持HTTPS</a></li><li><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#安装nginx">安装Nginx</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#配置支持https">配置支持HTTPS</a></li><!----><!--]--></ul></li><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level2" href="#使用受信任的证书">使用受信任的证书</a></li><li><ul class="vp-toc-list"><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#阿里云证书">阿里云证书</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#freessl证书">FreeSSL证书</a></li><!----><!--]--><!--[--><li class="vp-toc-item"><a class="route-link vp-toc-link level3" href="#使用acme-sh自动申请证书">使用acme.sh自动申请证书</a></li><!----><!--]--></ul></li><!--]--></ul><div class="vp-toc-marker" style="top:-1.7rem;"></div></div><!----></aside></div><!----><div class="theme-hope-content"><h1 id="nginx如何支持https-手把手教贼简单" tabindex="-1"><a class="header-anchor" href="#nginx如何支持https-手把手教贼简单"><span>Nginx如何支持HTTPS?手把手教贼简单!</span></a></h1><blockquote><p>随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!</p></blockquote><!-- more --><h2 id="生成ssl自签名证书" tabindex="-1"><a class="header-anchor" href="#生成ssl自签名证书"><span>生成SSL自签名证书</span></a></h2><blockquote><p>虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的!</p></blockquote><ul><li>首先创建SSL证书私钥,期间需要输入两次用户名和密码,生成文件为<code>blog.key</code>;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">openssl</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> genrsa</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -des3</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -out</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.key</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> 2048</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>利用私钥生成一个不需要输入密码的密钥文件,生成文件为<code>blog_nopass.key</code>;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">openssl</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> rsa</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -in</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.key</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -out</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog_nopass.key</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>创建SSL证书签名请求文件,生成SSL证书时需要使用到,生成文件为<code>blog.csr</code>;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">openssl</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> req</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -new</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -key</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.key</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -out</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.csr</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>在生成过程中,我们需要输入一些信息,需要注意的是<code>Common Name</code>需要和网站域名一致;</li></ul><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span>Enter pass phrase for blog.key:</span></span> <span class="line"><span>-----</span></span> <span class="line"><span>Country Name (2 letter code) [XX]:CN # 国家代码</span></span> <span class="line"><span>State or Province Name (full name) []:jiangsu # 省份</span></span> <span class="line"><span>Locality Name (eg, city) [Default City]:jiangsu # 城市</span></span> <span class="line"><span>Organization Name (eg, company) [Default Company Ltd]:macrozheng # 机构名称</span></span> <span class="line"><span>Organizational Unit Name (eg, section) []:dev # 单位名称</span></span> <span class="line"><span>Common Name (eg, your name or your server&#39;s hostname) []:blog.macrozheng.com # 网站域名</span></span> <span class="line"><span>Email Address []:macrozheng@qq.com # 邮箱</span></span> <span class="line"><span></span></span> <span class="line"><span>Please enter the following &#39;extra&#39; attributes</span></span> <span class="line"><span>to be sent with your certificate request</span></span> <span class="line"><span>A challenge password []: # 私钥保护密码,可以不输入直接回车</span></span> <span class="line"><span>An optional company name []: # 可选公司名称,可以不输入直接回车</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>生成SSL证书,有效期为365天,生成文件为<code>blog.crt</code>;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">openssl</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> x509</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -req</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -days</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> 365</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -in</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.csr</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -signkey</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.key</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -out</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.crt</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>其实最终有用的文件是两个,一个是证书文件<code>blog.crt</code>,另一个是不需要输入密码的证书私钥文件<code>blog_nopass.key</code>。</li></ul><h2 id="nginx支持https" tabindex="-1"><a class="header-anchor" href="#nginx支持https"><span>Nginx支持HTTPS</span></a></h2><blockquote><p>SSL证书生成好了,接下来我们就可以配置Nginx来支持HTTPS了!</p></blockquote><h3 id="安装nginx" tabindex="-1"><a class="header-anchor" href="#安装nginx"><span>安装Nginx</span></a></h3><ul><li>我们还是使用在Docker容器中安装Nginx的方式,先下载Nginx的Docker镜像;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> pull</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> nginx:1.10</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>下载完成后先运行一次Nginx,由于之后我们要把宿主机的Nginx配置文件映射到Docker容器中去,运行一次方便我们拷贝默认配置;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> 80:80</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> nginx</span><span style="--shiki-light:#005CC5;--shiki-dark:#56B6C2;"> \</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ABB2BF;">-v </span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;">/mydata/nginx/html:/usr/share/nginx/html</span><span style="--shiki-light:#005CC5;--shiki-dark:#56B6C2;"> \</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ABB2BF;">-v </span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;">/mydata/nginx/logs:/var/log/nginx</span><span style="--shiki-light:#005CC5;--shiki-dark:#56B6C2;"> \</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ABB2BF;">-d </span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;">nginx:1.10</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>运行成功后将容器中的Nginx配置目录拷贝到宿主机上去;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> container</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> cp</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> nginx:/etc/nginx</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> /mydata/nginx/</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>将宿主机上的<code>nginx</code>目录改名为<code>conf</code>,要不然<code>/mydata/nginx/nginx</code>这个配置文件目录看着有点别扭;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">mv</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> /mydata/nginx/nginx</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> /mydata/nginx/conf</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><ul><li>创建的Nginx容器复制完配置后就没用了,停止并删除容器;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> stop</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> nginx</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> rm</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> nginx</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>使用Docker命令重新启动Nginx服务,需要映射好配置文件,由于我们要支持HTTPS,还需要开放<code>443</code>端口。</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> run</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> 80:80</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> -p</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> 443:443</span><span style="--shiki-light:#005CC5;--shiki-dark:#D19A66;"> --name</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> nginx</span><span style="--shiki-light:#005CC5;--shiki-dark:#56B6C2;"> \</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ABB2BF;">-v </span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;">/mydata/nginx/html:/usr/share/nginx/html</span><span style="--shiki-light:#005CC5;--shiki-dark:#56B6C2;"> \</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ABB2BF;">-v </span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;">/mydata/nginx/logs:/var/log/nginx</span><span style="--shiki-light:#005CC5;--shiki-dark:#56B6C2;"> \</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ABB2BF;">-v </span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;">/mydata/nginx/conf:/etc/nginx</span><span style="--shiki-light:#005CC5;--shiki-dark:#56B6C2;"> \</span></span> <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ABB2BF;">-d </span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;">nginx:1.10</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="配置支持https" tabindex="-1"><a class="header-anchor" href="#配置支持https"><span>配置支持HTTPS</span></a></h3><ul><li>将我们生成好的SSL证书和私钥拷贝到Nginx的<code>html/ssl</code>目录下;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog_nopass.key</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> /mydata/nginx/html/ssl/</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">cp</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> blog.crt</span><span style="--shiki-light:#032F62;--shiki-dark:#98C379;"> /mydata/nginx/html/ssl/</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>接下来我们需要给<code>blog.macrozheng.com</code>这个域名添加HTTPS支持,在<code>/mydata/nginx/conf/conf.d/</code>目录下添加Nginx配置文件<code>blog.conf</code>,配置文件内容如下;</li></ul><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span>server {</span></span> <span class="line"><span> listen 80; # 同时支持HTTP</span></span> <span class="line"><span> listen 443 ssl; # 添加HTTPS支持</span></span> <span class="line"><span> server_name blog.macrozheng.com;</span></span> <span class="line"><span> </span></span> <span class="line"><span> #SSL配置</span></span> <span class="line"><span> ssl_certificate /usr/share/nginx/html/ssl/blog/blog.crt; # 配置证书</span></span> <span class="line"><span> ssl_certificate_key /usr/share/nginx/html/ssl/blog/blog_nopass.key; # 配置证书私钥</span></span> <span class="line"><span> ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本</span></span> <span class="line"><span> ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置SSL加密算法</span></span> <span class="line"><span> ssl_prefer_server_ciphers on; # 优先采取服务器算法</span></span> <span class="line"><span> ssl_session_cache shared:SSL:10m; # 配置共享会话缓存大小</span></span> <span class="line"><span> ssl_session_timeout 10m; # 配置会话超时时间</span></span> <span class="line"><span></span></span> <span class="line"><span> location / {</span></span> <span class="line"><span> root /usr/share/nginx/html/www;</span></span> <span class="line"><span> index index.html index.htm;</span></span> <span class="line"><span> }</span></span> <span class="line"><span></span></span> <span class="line"><span> location /admin {</span></span> <span class="line"><span> alias /usr/share/nginx/html/admin;</span></span> <span class="line"><span> index index.html index.htm;</span></span> <span class="line"><span> }</span></span> <span class="line"><span></span></span> <span class="line"><span> location /app {</span></span> <span class="line"><span> alias /usr/share/nginx/html/app;</span></span> <span class="line"><span> index index.html index.htm;</span></span> <span class="line"><span> }</span></span> <span class="line"><span></span></span> <span class="line"><span> error_page 500 502 503 504 /50x.html;</span></span> <span class="line"><span> location = /50x.html {</span></span> <span class="line"><span> root /usr/share/nginx/html;</span></span> <span class="line"><span> }</span></span> <span class="line"><span>}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>通过<code>HTTPS</code>访问<code>blog.macrozheng.com</code>这个域名,由于我们使用的是自己签名的SSL证书,浏览器会提示<code>您的连接不是私密连接</code>,点击继续前往可以通过HTTPS正常访问;</li></ul><figure><img src="/assets/nginx_https_start_01-DW0lLoFP.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>我们可以查看下证书的<code>颁发者</code>信息,可以发现正好是之前我们创建SSL证书签名请求文件时录入的信息;</li></ul><figure><img src="/assets/nginx_https_start_02-C7ITpkKS.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>接下来我们需要给<code>api.macrozheng.com</code>这个域名添加HTTPS支持,通过这个域名可以使用HTTPS访问我们的SpringBoot应用,<code>api.crt</code>和<code>api_nopass.key</code>文件需要自行生成,在<code>/mydata/nginx/conf/conf.d/</code>目录下添加Nginx配置文件<code>api.conf</code>,配置文件内容如下;</li></ul><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span>server {</span></span> <span class="line"><span> listen 80; # 同时支持HTTP</span></span> <span class="line"><span> listen 443 ssl; # 添加HTTPS支持</span></span> <span class="line"><span> server_name api.macrozheng.com; #修改域名</span></span> <span class="line"><span></span></span> <span class="line"><span> #ssl配置</span></span> <span class="line"><span> ssl_certificate /usr/share/nginx/html/ssl/api/api.crt; # 配置证书</span></span> <span class="line"><span> ssl_certificate_key /usr/share/nginx/html/ssl/api/api_nopass.key; # 配置证书私钥</span></span> <span class="line"><span> ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本 # 配置SSL加密算法</span></span> <span class="line"><span> ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;</span></span> <span class="line"><span> ssl_prefer_server_ciphers on; # 优先采取服务器算法</span></span> <span class="line"><span> ssl_session_cache shared:SSL:10m; # 配置共享会话缓存大小</span></span> <span class="line"><span> ssl_session_timeout 10m; # 配置会话超时时间</span></span> <span class="line"><span></span></span> <span class="line"><span> location / {</span></span> <span class="line"><span> proxy_pass http://192.168.3.101:8080; # 设置代理服务访问地址</span></span> <span class="line"><span> proxy_set_header Host $http_host; # 设置客户端真实的域名(包括端口号)</span></span> <span class="line"><span> proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实IP</span></span> <span class="line"><span> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IP</span></span> <span class="line"><span> proxy_set_header X-Forwarded-Proto $scheme; # 设置客户端真实的协议(http还是https)</span></span> <span class="line"><span> index index.html index.htm;</span></span> <span class="line"><span> }</span></span> <span class="line"><span></span></span> <span class="line"><span> error_page 500 502 503 504 /50x.html;</span></span> <span class="line"><span> location = /50x.html {</span></span> <span class="line"><span> root /usr/share/nginx/html;</span></span> <span class="line"><span> }</span></span> <span class="line"><span>}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>通过<code>HTTPS</code>访问<code>api.macrozheng.com</code>这个域名,访问地址为:https://api.macrozheng.com/swagger-ui.html</li></ul><figure><img src="/assets/nginx_https_start_03-BbD8PNYF.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>任意调用一个接口测试下,比如说登录接口,可以发现已经可以通过HTTPS正常访问SpringBoot应用提供的接口。</li></ul><figure><img src="/assets/nginx_https_start_04-DLJgZQS8.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><h2 id="使用受信任的证书" tabindex="-1"><a class="header-anchor" href="#使用受信任的证书"><span>使用受信任的证书</span></a></h2><blockquote><p>之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,另一种是从FreeSSL申请。</p></blockquote><h3 id="阿里云证书" tabindex="-1"><a class="header-anchor" href="#阿里云证书"><span>阿里云证书</span></a></h3><ul><li>阿里云上可以申请的免费证书目前只有支持单个域名的DV级SSL证书。比如说你有<code>blog.macrozheng.com</code>和<code>api.macrozheng.com</code>两个二级域名需要使用HTTPS,就需要申请两个SSL证书。</li></ul><figure><img src="/assets/nginx_https_start_05-C5X9KdxL.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>申请成功后点击下载Nginx证书即可;</li></ul><figure><img src="/assets/nginx_https_start_06-DfmjVSgD.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>下载完成后解压会有下面两个文件;</li></ul><div class="language-bash line-numbers-mode" data-highlighter="shiki" data-ext="bash" data-title="bash" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">blog.macrozheng.com.key</span><span style="--shiki-light:#6A737D;--shiki-dark:#7F848E;--shiki-light-font-style:inherit;--shiki-dark-font-style:italic;"> # 证书私钥文件</span></span> <span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#61AFEF;">blog.macrozheng.com.pem</span><span style="--shiki-light:#6A737D;--shiki-dark:#7F848E;--shiki-light-font-style:inherit;--shiki-dark-font-style:italic;"> # 证书文件</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>拷贝证书文件到Nginx的指定目录下,然后修改配置文件<code>blog.conf</code>,只要修改证书配置路径即可,修改完成后重启Nginx;</li></ul><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#24292e;--shiki-dark:#abb2bf;--shiki-light-bg:#fff;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes github-light one-dark-pro vp-code"><code><span class="line"><span>#SSL配置</span></span> <span class="line"><span>ssl_certificate /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.pem; # 配置证书</span></span> <span class="line"><span>ssl_certificate_key /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.key; # 配置证书私钥</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul><li>再次通过HTTPS访问<code>blog.macrozheng.com</code>这个域名,发现证书已经有效了,连接也是安全的了。</li></ul><figure><img src="/assets/nginx_https_start_07-BgGM3DAA.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><h3 id="freessl证书" tabindex="-1"><a class="header-anchor" href="#freessl证书"><span>FreeSSL证书</span></a></h3><ul><li>如果你有使用通配符域名的需求,可以上<code>FreeSSL</code>申请SSL证书,不过免费的有效期只有3个月,这就意味着你过3个月就要重新申请一次了。</li></ul><figure><img src="/assets/nginx_https_start_08-BOVzVlTE.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>附上官网地址:https://freessl.cn/</li></ul><h3 id="使用acme-sh自动申请证书" tabindex="-1"><a class="header-anchor" href="#使用acme-sh自动申请证书"><span>使用<code>acme.sh</code>自动申请证书</span></a></h3><ul><li><code>acme.sh</code>脚本实现了<code>acme</code>协议, 可以从<code>letsencrypt</code>生成免费的证书。一般我们申请的证书有效期都是1年,过期就要重新申请了,使用<code>acme.sh</code>脚本可以实现到期自动申请,再也不用担心证书过期了!</li></ul><figure><img src="/assets/nginx_https_start_09-dxz6OW7U.png" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>附上官网地址:https://github.com/acmesh-official/acme.sh</li></ul></div><!----><footer class="vp-page-meta"><!----><div class="vp-meta-item git-info"><div class="update-time"><span class="vp-meta-label">上次编辑于: </span><!----></div><div class="contributors"><span class="vp-meta-label">贡献者: </span><!--[--><!--[--><span class="vp-meta-info" title="email: zhenghong1991@126.com">macro</span><!--]--><!--]--></div></div></footer><nav class="vp-page-nav"><a class="route-link auto-link prev" href="/mall/reference/elk_security.html" aria-label="居然有人想白嫖我的日志,赶紧开启安全保护压压惊!"><div class="hint"><span class="arrow start"></span>上一页</div><div class="link"><!---->居然有人想白嫖我的日志,赶紧开启安全保护压压惊!</div></a><a class="route-link auto-link next" href="/mall/reference/swagger_starter.html" aria-label="还在手动整合Swagger?Swagger官方Starter是真的香!"><div class="hint">下一页<span class="arrow end"></span></div><div class="link">还在手动整合Swagger?Swagger官方Starter是真的香!<!----></div></a></nav><!----><!--[--><div class="theme-hope-content"><h2 id="公众号" tabindex="-1"><a class="header-anchor" href="#公众号" aria-hidden="true">#</a> 公众号</h2><p><img src="http://macro-oss.oss-cn-shenzhen.aliyuncs.com/mall/banner/qrcode_for_macrozheng_258.jpg" alt="公众号图片" loading="lazy"></p></div><!--]--><!--]--></main><!--]--><footer class="vp-footer-wrapper"><div class="vp-footer"><div style="text-align: center"><span><a href="http://beian.miit.gov.cn/" target="_blank">苏ICP备19059396号-1</a></span></div></div><div class="vp-copyright">Copyright © 2024 macrozheng </div></footer></div><!--]--><!--]--><!--[--><!----><!--[--><!--]--><!----><!--]--><!--]--></div> <script type="module" src="/assets/app-N9_8XgsU.js" defer></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10