nginx配置https及url重写

nginx配置https及url重写

  • 一、https简介
    • 1、安全访问
    • 2、数据的安全性
    • 3、数据的完整性
    • 3、身份的真实性
  • 二、配置https网站
    • 1、环境规划
    • 2、部署私有CA
    • 3、部署https的虚拟主机
  • 三、URL重写
    • 1、语法
  • 四、location的写法
    • 1、语法
    • 2、location = uri {}
    • 3、location ~ uri { }
    • 4、location ~* uri { }
    • 5、location ^~ uri { }
    • 5、location的优先级
  • 五、nginx处理php页面
    • 1、安装php-fpm
    • 2、配置nginx调用php
    • 3、测试访问php页面

一、https简介

https 密文

1、安全访问

数据的安全性,加密/解密
数据的完整性
身份的真实性

2、数据的安全性

发送方加密数据,接收方解密数据

  • 对称加密算法
    加密、解密时使用的密钥是一样的
    典型算法: DES、3DES、AES

  • 非对称加密算法
    密钥对,公钥、私钥
    公钥加密、私钥解密
    典型算法: RSA、DSA

  • 使用原则
    使用对称算法加密真实的数据,使用非对称算法加密对称算法中的密钥

3、数据的完整性

借助哈希算法保证数据的完整性
哈希算法: MD5、SHA

[root@node01 ~]# md5sum /etc/fstab 
e48a442f1af72ac73d69ba0b12de254b  /etc/fstab
[root@node01 ~]# sha224sum /etc/passwd
6b427e3f351f343325baa53ef9a04f14ff13172f50ee9c2fd32fbe65  /etc/passwd

3、身份的真实性

私钥签名,公钥验证签名
在这里插入图片描述- 实际应用:
密钥、证书

  • 证书的来源
    互联网上发布业务,向CA申请证书
    私有CA

二、配置https网站

1、环境规划

manage.linux.com /web/manage
192.168.140.10 nginx服务器
192.168.140.11 私有CA

2、部署私有CA

  • 创建两个数据库文件
[root@ca ~]# touch /etc/pki/CA/index.txt

[root@ca ~]# echo 01 > /etc/pki/CA/serial

[root@ca ~]# cat /etc/pki/CA/serial
01
  • 创建密钥对
[root@ca ~]# openssl genrsa -out /etc/pki/CA/private/cakey.pem 1024 
Generating RSA private key, 1024 bit long modulus
...++++++
..............++++++
e is 65537 (0x10001)
  • 创建自签证书
[root@ca ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:easthome
Organizational Unit Name (eg, section) []:easthome
Common Name (eg, your name or your server's hostname) []:ca.linux.com
Email Address []:

3、部署https的虚拟主机

  • 创建网站的密钥
[root@node01 ~]# mkdir /usr/local/nginx/ssl
[root@node01 ~]# cd /usr/local/nginx/ssl
[root@node01 ssl]# openssl genrsa -out manage.key 1024 
Generating RSA private key, 1024 bit long modulus
....++++++
.......................++++++
e is 65537 (0x10001)

[root@node01 ssl]# ls
manage.key
  • 创建证书申请
[root@node01 ssl]# openssl req -new -key manage.key -out manage.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:bj
Locality Name (eg, city) [Default City]:bj
Organization Name (eg, company) [Default Company Ltd]:easthome
Organizational Unit Name (eg, section) []:easthome
Common Name (eg, your name or your server's hostname) []:manage.linux.com
Email Address []:bj@qq.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  • 将证书申请发送到CA审核
[root@node01 ssl]# scp manage.csr root@192.168.140.11:/opt/
manage.csr                                                            100%  688   744.6KB/s   00:00    
[root@node01 ssl]# 
  • CA签发证书, 将证书发送回网站服务器
[root@ca ~]# openssl ca -in /opt/manage.csr -out /etc/pki/CA/certs/manage.crt -days 3650 
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct 29 06:25:54 2024 GMT
            Not After : Oct 27 06:25:54 2034 GMT
        Subject:
            countryName               = cn
            stateOrProvinceName       = bj
            organizationName          = easthome
            organizationalUnitName    = easthome
            commonName                = manage.linux.com
            emailAddress              = bj@qq.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                6E:90:6A:1B:F0:5F:9D:AD:5E:49:D7:AC:59:CF:BC:6A:AF:7E:44:BF
            X509v3 Authority Key Identifier: 
                keyid:83:17:3A:29:2A:1C:6A:1E:E4:13:68:85:D1:92:59:3F:E6:34:88:49

Certificate is to be certified until Oct 27 06:25:54 2034 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

[root@ca ~]# cat /etc/pki/CA/serial
02
[root@ca ~]# cat /etc/pki/CA/index.txt
V	341027062554Z		01	unknown	/C=cn/ST=bj/O=easthome/OU=easthome/CN=manage.linux.com/emailAddress=bj@qq.com


[root@ca ~]# scp /etc/pki/CA/certs/manage.crt root@192.168.140.10:/usr/local/nginx/ssl

Warning: Permanently added '192.168.140.10' (ECDSA) to the list of known hosts.
manage.crt                                                            100% 3137     1.4MB/s   00:00   
  • 创建网页目录,测试网页
[root@node01 ~]# mkdir -p /web/manage
[root@node01 ~]# vim /web/manage/index.html
[root@node01 ~]# cat /web/manage/index.html
<h1> web manage </h1>
  • 确认nginx安装了ssl模块
[root@node01 ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.26.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
  • 配置虚拟主机
[root@node01 ~]# cat /usr/local/nginx/conf.d/manage.conf
server {
    listen       443 ssl;
    server_name  manage.linux.com;

    error_log /usr/local/nginx/logs/manage_error.log error;
    access_log /usr/local/nginx/logs/manage_access.log main;

    ssl_certificate      /usr/local/nginx/ssl/manage.crt;
    ssl_certificate_key  /usr/local/nginx/ssl/manage.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   /web/manage;
        index  index.html index.htm;
    }
}
[root@node01 ~]# vim /usr/local/nginx/conf/nginx.conf

    include       /usr/local/nginx/conf.d/manage.conf;
  • 重新加载nginx,测试访问
[root@node01 ~]# /usr/local/nginx/sbin/nginx -s reload

[root@node01 ~]# netstat -tunlp | grep nginx
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1029/nginx: master  
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1029/nginx: master  

在这里插入图片描述

三、URL重写

1、语法

rewrite   旧uri地址	新uri地址;

注意事项: 
1、旧地址不包含请求中的参数
2、旧地址支持正则表达式
3、建议新地址写完整的URL地址,避免循环替换 
  • 需求1:
	rewrite ^/audio  http://blog.linux.com/mp3;
	rewrite ^/audio/(.*)  http://blog.linux.com/mp3/$1;
  • 需求2: 网站换名
	rewrite ^/   https://www.jd.com;

需求3: https自动跳转

       if ($host = manage.linux.com) {
            rewrite ^/   https://manage.linux.com;
       }

$host:nginx内部变量,用于匹配网站的主机名

四、location的写法

1、语法

 	location [ = | ~ | ~* | ^~ ] uri { ... }

2、location = uri {}

精确匹配

location = /test { }			http://x.y.z/test

location = / { }					http://x.y.z/
   // 定义错误页面
   error_page 404 /404.html;
   location = /404.html {
      root /web/blog;
   }

3、location ~ uri { }

以正则表达式的方式匹配请求,区分大小写

location ~ /test { }
http://x.y.z/test/b
http://x.y.z/a/b/test
http://x.y.z/admin/test/person
// 匹配所有图片的请求 
location ~ \.(jpg|jpeg|gif|png)$ { }

4、location ~* uri { }

以正则表达式的方式匹配请求,不区分大小写

location ~* \.php$ { }

http://x.y.z/test/index.php
http://x.y.z/test/admin.PHP

5、location ^~ uri { }

不以正则表达式的方式匹配请求

location ^~ /test {}
http://x.y.z./test/ab/c
http://x.y.z/test/logo/admin

5、location的优先级

同一个网站中存在多个location时,一个请求可能 会被多个location同时匹配,按优先级处理

从高到低 
=		^~	~		~* 	location /

五、nginx处理php页面

nginx默认只能处理静态资源,服务器上运行PHP网站,还得需要php软件的支持,同时需要配置nginx通过fastCGI机制能够成功调用php

1、安装php-fpm

[root@node01 ~]# yum install -y php php-fpm 

[root@node01 ~]# systemctl enable --now php-fpm 
[root@node01 ~]# netstat -tunlp | grep php
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      2576/php-fpm: maste 
[root@node01 ~]# 
[root@node01 ~]# ps -elf | grep php  
4 S root       2576      1  0  80   0 - 58155 ep_pol 10:35 ?        00:00:00 php-fpm: master process (/etc/php-fpm.conf)
5 S apache     2577   2576  0  80   0 - 58242 inet_c 10:35 ?        00:00:00 php-fpm: pool www
5 S apache     2578   2576  0  80   0 - 58155 inet_c 10:35 ?        00:00:00 php-fpm: pool www
5 S apache     2579   2576  0  80   0 - 58155 inet_c 10:35 ?        00:00:00 php-fpm: pool www
5 S apache     2580   2576  0  80   0 - 58242 inet_c 10:35 ?        00:00:00 php-fpm: pool www
5 S apache     2581   2576  0  80   0 - 58155 inet_c 10:35 ?        00:00:00 php-fpm: pool www

2、配置nginx调用php

   location ~ \.php$ {
      root           /web/blog;
      fastcgi_pass   127.0.0.1:9000;				// 调用php,指定php的IP和端口
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
  }

3、测试访问php页面

<h1> AAAAAAAAAAAAAAA </h1>
<h2> BBBBBBBBBBBBBBB </h2>

<?php
  phpinfo();
  echo "<h1>Hello PHP, wmh@@@@@World!</h1>";
?>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/906215.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VM实战】VMware迁移到VirtualBox

VMware 虚拟机开机卸载VMware Tools 调整虚拟磁盘 对于Windows 10及以上的虚拟机&#xff0c;一般VMware默认都会选Nvme固态硬盘。在导出前必须将其改为SATA&#xff0c;否则VirtualBox导入会报Appliance Import错误 (E_INVALIDARG 0x80070057) 先删掉当前盘的挂载&#xff…

Java项目实战II基于Java+Spring Boot+MySQL的植物健康系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 基于Java、…

私有化视频平台EasyCVR视频汇聚平台接入RTMP协议推流为何无法播放?

私有化视频平台EasyCVR视频汇聚平台兼容性强、支持灵活拓展&#xff0c;平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、平台级联等视频能力。 有用户反馈&#xff0c;项目现场使用RTMP协议接入EasyCVR平台&#xff0c;但是视频却不…

线代的几何意义(一)——向量,坐标,矩阵

这个系列的文章本质上是3Blue1Brown视屏的观后总结&#xff0c;如果想看视屏的朋友们可以点击链接直达b站的视频。 前面关于矩阵的文章都是从矩阵的数字意义上分析的&#xff0c;很少引入更为直观&#xff08;可以这样说吧&#xff09;的从几何出发的解释。而这个系列的文章变…

springboot志愿者在线辅助学习系统-计算机毕业设计源码01048

摘要 随着互联网的普及和发展&#xff0c;线上学习成为了一种趋势。然而&#xff0c;在线学习也存在着一些问题&#xff0c;例如学习资源的不足、难以解决学习困惑等。为了解决这些问题&#xff0c;因此&#xff0c;我们可以构建一个志愿者在线辅助学习系统。该系统通过知识库和…

uicc.hci.service的理解

一、uicc.hci.framework的java类 (1) HCIDevice i : getHCIservice 判断获取的service能否实现&#xff0c;若可以则调用并实现serviceimp&#xff0c;并记录appid。 ii : isHCIServiceAvaliable 用于获取service可用性的信息&#xff0c;返回0代表可用。 二、uicc.hci.servic…

代理IPv6知识分享课堂二

嗨朋友们&#xff0c;欢迎来到今天的代理IPv6知识分享课堂&#xff0c;小蝌蚪上堂课跟大家一起认识了它的概念和工作原理等基础内容&#xff0c;我们算是对它有了一个初步的了解&#xff0c;那今天这节课我们讲的会深入点&#xff0c;我们今天来了解了解它的应用场景和切实地教…

Python+Appium+Pytest+Allure自动化测试框架-代码篇

文章目录 自动化测试框架工程目录示例测试代码示例结果查看allurepytest编写pytest测试样例的规则pytest conftest.py向测试函数传参 appium启动appium服务代码端通过端口与appium服务通信对设备进行操作在pytest测试用例中调用appium 更多功能 PythonAppiumPytestAllure自动化…

在培训班学网络安全有用吗

在当今数字化时代&#xff0c;网络安全问题日益凸显&#xff0c;成为了企业和个人关注的焦点。随着对网络安全人才需求的不断增长&#xff0c;各种网络安全培训班也如雨后春笋般涌现。然而&#xff0c;在培训班学网络安全真的有用吗? 一、网络安全的重要性与挑战 1. 信息时代的…

windows下安装python库wordCloud报错

换电脑安装wordcloud半天安装失败&#xff0c;记录一下遇到的坑&#xff0c;也给大家节省点时间。 方法1&#xff1a; 错误呢就是下面这个&#xff0c;说没c编译器&#xff0c;要不就去他给的地址上安装一下&#xff0c;我安装了一下好像没什么用&#xff0c;也没太敢勾选&am…

ACM模式下Java读取控制台输入注意事项及输出规范化

背景 在ACM模式下。需要我们去接受输入的参数&#xff0c;一般是使用Scanner去读取控制台输入的参数System.in。 不熟悉的情况下&#xff0c;很容易出现问题&#xff0c;针对常见的问题做一个总结。 一、nextXxx 如next&#xff0c;nextInt&#xff0c;nextFloat&#xff0c…

一键切换暗黑模式,这些代码片段你不可错过

文章目录 前言正文1.多主题切换2.使用 SASS 实现轻松深色模式3.动画切换浅色与深色模式4.纯 CSS 主题切换5.GitHub 风格的深色模式切换6.持久深色模式7.基本 Vue 响应式切换8.创意灯泡切换 总结 前言 如今&#xff0c;许多网站设计师都会为用户提供浅色和深色模式的选择。这不…

Spring之依赖注入(DI)和控制反转(IoC)——配置文件、纯注解

依赖注入 依赖注入(Dependency Injection&#xff0c;简称 DI)与控制反转(loC)的含义相同&#xff0c;只不过这两 个称呼是从两个角度描述的同一个概念。对于一个 Spring 初学者来说&#xff0c;这两种称呼很难理解, 下面我们将通过简单的语言来描述这两个概念。 当Java对象&…

Node.js:内置模块

Node.js&#xff1a;内置模块 Node.jsfs模块读取文件写入文件__dirname path模块路径拼接文件名解析 http模块创建服务 Node.js 传统的JavaScript是运行在浏览器的&#xff0c;浏览器就是其运行环境。 浏览器提供了JavaScript的API&#xff0c;以及解析JavaScript的解析引擎&a…

什么是工单管理系统?最全百科

在现代企业的客户服务和支持过程中&#xff0c;工单管理系统扮演着至关重要的角色。它不仅帮助企业高效地处理客户请求&#xff0c;还能提升客户满意度和忠诚度。本文将深入探讨工单管理系统的定义、功能、优势&#xff0c;并推荐使用Zoho Desk作为理想的解决方案。 一、工单管…

橙子电视 1.02 | 无广告,高清秒播,频道丰富

橙子电视版是针对智能电视和电视盒子而开发的一款在线观看电视应用软件&#xff0c;目前已经更名为橙色电视Live。该软件最大的特色是完全免费&#xff0c;并且支持几乎国内所有的电视台&#xff0c;无论是央视频道&#xff0c;还是省卫视频道应有尽有。同时为了更好的服务用户…

C++模拟实现list

C教学总目录 C模拟实现list 1、成员变量2、迭代器3、insert函数4、erase函数5、pop_back、push_front、pop_front函数6、size和clear函数7、析构函数8、拷贝构造函数9、赋值运算符重载完整代码&#xff08;包含测试代码&#xff09; 1、成员变量 先来看看SGI版本STL中list的实…

《高频电子线路》 —— 反馈型振荡器

文章内容来源于【中国大学MOOC 华中科技大学通信&#xff08;高频&#xff09;电子线路精品公开课】&#xff0c;此篇文章仅作为笔记分享。 反馈型振荡器基本工作原理 振荡器分类 自激&#xff1a;没有信号输入他激&#xff1a;有信号输入RC振荡器主要产生低频的正弦波&#x…

如何在Linux下安装和配置Docker

文章目录 安装前的准备在Debian/Ubuntu上安装Docker添加Docker仓库安装Docker验证安装 在CentOS/RHEL上安装Docker安装必要的软件包设置Docker仓库安装Docker启动Docker服务 Docker的基本使用拉取一个镜像运行一个容器 配置Docker创建Docker目录使用非root用户运行Docker 结语 …

1-petalinux 问题记录-根文件系统分区问题

在MPSOC上使用SD第二分区配置根文件系统的时候&#xff0c;需要选择对应的bootargs&#xff0c;但是板子上有emmc和sd两个区域&#xff0c;至于配置哪一种mmcblk0就出现了问题&#xff0c;从vivado中的BlockDesign和MLK XCZU2CG原理图来看的话&#xff0c;我使用的SD卡应该属于…