Nginx学习,不妨看一下

Posted AaronCoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx学习,不妨看一下相关的知识,希望对你有一定的参考价值。

记得点击蓝字关注我们哦!

nginx学习

Nginx也不知道是第几遍学了,加油吧,每一次学习都会有一种新的体验感!加油!

1. Nginx简介

Nginx是高性能的HTTP及反向代理的服务器,高并发处理能力十分强大,能经受住高负载的考验,有报表表明Nginx能够支持50000个并发连接数。

1.1 Nginx的主要作用

  • 正向代理
  • 反向代理
  • 负载均衡
  • 动静分离

1.2 正向/反向代理

正向代理

正向代理需要在客户端配置代理服务器进行指定网站访问。通俗来说,正向代理即帮助我们请求我们所要请求的资源。

Nginx学习,不妨看一下
正向代理

反向代理

Nginx学习,不妨看一下
反向代理

1.3 负载均衡

客户端发送多个请求到服务器,服务器处理响应的需求,其中有些请求的业务逻辑需要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。早期访问量不大这种模式是可行的,但是现在随着请求数量不断增长,以及业务复杂度逐渐增加,此种单一架构会造成服务器对响应客户端的请求日益缓慢,并发量大的时候很容易造成服务器直接崩溃。

可以通过升级服务器的配置来解决,但是如果请求与业务复杂度进一步增加的,硬件的配置总是有一个上限的,于是这个时候我们可以想到使用多台服务器,让多个请求分别请求到各个服务器上面,从而减轻之前单一服务器的请求处理压力。集群的概念的就产生了,多台服务器协同工作,请求分发到各个服务器上,这种工作模式叫做负载均衡

Nginx学习,不妨看一下
负载均衡

1.4 动静分离

动静分离的主要目的是为了加快网页的解析速度,网页一般有动态和静态的内容组成,可以将动态页面和静态页面交由不同的服务器进行解析,从而加快解析速度,降低原来单一服务器的压力。

Nginx学习,不妨看一下
动静分离

2. Nginx的安装

2.1 安装

去官网下载Nginx官网

# 安装依赖包
yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
# 下载nginx
wget http://nginx.org/download/nginx-1.14.2.tar.gz
# 解压即可
tar -zxvf nginx-1.14.2.tar.gz
# 配置并选中目录
./configure --prefix=/usr/local/nginx
# 编译&安装
make && make install
# 来到nginx目录执行nginx
cd /usr/local/nginx/sbin
./nginx
Nginx学习,不妨看一下
nginx启动

2.2 Nginx相关命令

# 启动nginx
nginx
# 重启nginx
nginx -s reopen
# 重新加载nginx.conf配置文件,然后以优雅的方式重启nginx
nginx -s reload
# 强制停止nginx
nginx -s stop
# 优雅的停止nginx服务(处理完所有请求后再停止服务)
nginx -s quit
# 打开帮助信息,两种方式任选其一
nginx [-?|-h]
# 显示版本信息并退出
nginx -v
# 显示版本和配置选项信息并退出
nginx -V
# 检测配置文件是否有误,然后退出
nginx -t
# 检测配置文件是否有语法错误,转储并退出
nginx -T
# 在检测配置文件期间屏蔽非错误信息
nginx -q
# 设置路径前缀(默认为/usr/local/nginx)
nginx -p prefix
# 设置配置文件(默认为/etc/nginx/nginx.conf)
nginx -c filename
# 设置配置文件外的全局指令
nginx -g directives
# 杀死所有nginx进程
killall nginx

3. Nginx的配置文件

Nginx配置文件的位置/usr/local/nginx/conf/nginx.conf

nginx.conf的结构

Nginx学习,不妨看一下
nginx.conf结构
  • 全局块:配置影响nginx全局的指令,一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
  • events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等。
  • http块:可以嵌套多个server,配置代理、缓存、日志定义等绝大多数功能和第三方模块的配置。如文件引入、MIME-TYPE定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数等。
  • server块:配置虚拟主机的相关参数,一个http中可以有多个server块
  • location块:配置请求的路由,以及各种页面的处理情况
#user  nobody; # Nginx用户及组: user xc student 用户 组
worker_processes  1; # 工作进程数,根据硬件调整,一般等于CPU数量或者2倍的CPU数

#
 错误日志存放的路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# 进程号pid文件存放的路径
#pid        logs/nginx.pid;

#
 worker_rlimit_nofile 204800 下面详解
events {
# use epoll;表示使用epoll的IO模型,Linux建议使用epoll,FreeBSD建议采用Kqueue,window下不指定
    worker_connections 1024;# 每个工作进程的最大连接数量,根据硬件调整,和前面的工作进程配合起来使用,尽量大,但控制别把cpu跑满100%,每个进程允许最多的连接数。每台nginx服务器的最大连接数为worker_processes*worker_connections
    # Keepalive_timeout 60;keepalive超时时间
    # client_header_buffer_size 4k;客户端请求头部的缓冲区大小,可以根据系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。(一页大小为4k)
    # getconfg PAGESIZE,可以看到4096,即4k
    # open_file_cache max=65535 inactive=60s;为打开文件指定缓存,默认是不启用,max指定缓存数量,建议和打开文件数保持一致,inactive指经过多少时间文件没被请求就删除缓存。
    # open_file_cache_valid 80s;指缓存有效信息检查的时间周期大小
    # open_file_cache_min_uses 1;open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一致是在缓存中打开的。如果一个文件在inactive时间内一次没被使用,将被移除。
}

#
 设置http服务器,利用他的反向代理功能提供负载均衡支持
http {
    include       mime.types;
    default_type  application/octet-stream;# 设定mime类型,类型由mime.type文件定义
# 日志格式设置,
# $remote_addr与http_x_forwarded_for用于记录客户端的ip地址
# $remote_user:用来记录客户端用户名称
# $time_local:用来记录访问时间和时区
# $request:用来记录请求的URL和HTTP协议
# $status:用来记录请求状态码,200表示成功
# $body_bytes_sent:记录发送给客户端主体文件内容大小
# $http_referer:用来记录从哪个页面链接访问过来的
# $http_user_agent:记录客户浏览器的相关信息
# 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_addr拿到的是反向代理服务器的IP地址,反向代理服务器在转发请求的http头信息中可以增加$http_x_forwarded_for信息,用以记录原有客户端的ip地址和原来客户端的请求的服务器地址
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
# 使用access_log指定设置了日志格式的日志存放的文件路径
    #access_log  logs/access.log  main;
# server_names_hash_bucket_size 128;保存服务器名字的hash表示由指令server_names_hash_max_size和server_names_hash_bucket_size控制的。hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的
#倍数,在减少了在内存中的存储次数之后,是在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路
#处理器缓存的大小,那么在查找键的时候,在内存中查找的次数为2,第一次是确定存储单元的地址,第二次是在
#存储单元中查找键值,因此如果nginx给出需要增大hash max size或者hash bucket size的提示,则首要是增大前一
#个参数的大小。
# client_header_buffer_size 4k;客户端请求头部的缓冲区大小,可以根据系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。(一页大小为4k)
# large_client_header_buffers 8 128k;客户请求头缓冲大小,nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,会使用large_client_header_buffers来读取
# open_file_cache max=102400 inactive=20s;表示指令缓存是否使用
# open_file_cache_errors off;表示是否记录搜索文件时发生的错误信息
# open_file_cache_min_uses 1;指定参数在一定时间范围内可以使用最小的文件数,如果使用更大的值,文件描述符在cache中总是打开的状态
# open_file_cache_valid 60;表示何时需要检查open_file_cache中缓存项目的有效信息
# client_max_body_size 300m;设定通过nginx上传文件的大小
    sendfile        on;# sendfile指定nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应
    #用,应该设置为on,如果用来进行下载等应用磁盘IO重负载应用可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime
    #tcp_nopush     on;# 此选项允许或者禁用socket的tcp_cork的选项,此选项仅在使用sendfile的时候使用
# proxy_cnnect_timeout 90;后端服务器连接的超时时间,发起握手等候响应的超时时间
# proxy_send_time 180;后端服务器数据回传时间,就是在规定时间必须传完所有的数据
# proxy_buffer_size 256k;设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个
#小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以设置为更小
# proxy_buffers 4 256k;设置用于读取应答(来自代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能为4k或者8k
# proxy_cache_path /data/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
# 设置内存缓存地址,空间大小为200M,一天内没有被访问则自动清除,硬盘缓存空间大小为30GB
    #keepalive_timeout  0;表示超时时间
    keepalive_timeout  65;
# 是否使用压缩
    #gzip  on;
# tcp_nodelay on;
# client_body_buffer_size 512k;
# proxy_intercept_errors on;表示使nginx阻止HTTP应答代码为400或者更高的应答。
# 负载均衡设置的服务器(具体下方有详细解释)
    upstream bakend{
     server 127.0.0.1:8080;
     server 127.0.0.1:8090;
     server 127.0.0.1:8010;
     hash $request_uri;
    }
    # 配置虚拟机
    server {
        listen       80;# 配置监听端口
        server_name  localhost;# 配置访问域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
  # 设置匹配模式
        location / {
            root   html;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the php scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ .php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ .php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

#
 设置HTTPS服务器,这个需要安装证书
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

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

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

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

全局配置中的worker_rlimit_nofile 204800:表示指定进程可以打开的最大描述符的数目

这个指令是指当一个nginx进程可以打开的最大的文件描述符的数目,理论值应该与最多打开文件数ulimit -nnginx进程数相除,但由于nginx分配请求并不是那么均匀,所以最好与ulimit -n保持一致。(测了一下,本机1024,买的腾讯云服务器是100001)

nginx调度时分给请求到进程并不是那么均衡,加入填写10240,总并发量达到3-4万时就有进程可能超过10240了,此时会返回502错误(网关错误Bad Gateway表示服务器收到无效影响从上游服务器访问履行它的要求。)

nginx的upstream的分配

  • 轮询

    • 默认方式,每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,可以实现自动剔除
  • weight

    • 权重,指定轮询的几率,weight和访问比率成正比,用于后端服务器性能不均的情况(性能好的权重可以设置的大一些)

    • upstream bakend{
       server 192.168.233.129 weight=10;
       server 193.167.233.130 weight=20;
      }
  • ip_hash

    • 每个请求按照ip的hash的结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    • upstream bakend{
       ip_hash;
       server 192.168.233.129:8888;
       server 192.168.233.130:8888;
      }
  • fair

    • 第三方组件,按照后端服务器的响应时间来分配请求,响应时间短的优先分配。

    • upstream bakend{
      server server1;
      server server2;
      fair;
      }
  • url_hash

    • 第三方组件,按照访问的url的hash结果来分配请求,使得每个url定向到同一个后端服务器,后端服务器为缓存时比较有效

    • upstream backend{
       server server1;
       server server2;
       hash $request_uri;
       hash_method crc32;
      }

使用建议

upstream bakend{
 # 表示当前server暂时不参与负载均衡
 server 192.168.233.129:8888 down;
 # 设置权重
 server 192.168.233.129:9999 weight=2;
 # max_fails:允许请求失败的次数默认为1,当超过最大的次数,返回proxy_next_upstream模块定义的错误
 # fail_timeout:max_fails次失败之后,暂停的时间
 server 192.168.233.129:8000;
 # 其他所有的非backup机器down或者非常忙的时候,请求backup机器,这条机器压力最轻
 server 192.168.233.129:9000 backup;
}

4. Nginx相关实践

由于涉及到服务器的负载均衡和反向代理,首先需要安装tomcat

tomcat安装

# 下载tomcat
wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.5.61/bin/apache-tomcat-8.5.61.tar.gz
# 解压到/opt/目录下
tar -zxvf apache-tomcat-8.5.61.tar.gz -C /opt/
# 修改名称为tomcat,进入cd /opt/tomcat/conf
vim server.xml # 修改访问端口为8899
# 进入bin启动
./startup.sh
# 观察日志
tail -f ../logs/catalina.out

启动成功

Nginx学习,不妨看一下
Tomcat启动成功

4.1 nginx反向代理配置

实现输入某个网址主动拦截到nginx页面。

实现步骤

# 修改nginx.conf的配置文件,配置代理转发
location / {
            root   html;
            proxy_pass http://192.168.233.129:8899;
            index  index.html index.htm;
        }
# 重新加载nginx.conf配置文件
nginx -s reload
# 修改本机hosts文件,路径C:WindowsSystem32driversetchosts,加入
192.168.233.129 www.hao123.com

启动浏览器,输入www.hao123.com就会发现自动跳转到了Tomcat启动页面。

4.2. nginx反向代理端口跳转

准备工作

# 准备第二个tomcat服务器
cp -r tomcat ./tomcat2
# 修改启动和停止端口,启动默认是8080,停止默认是8005,都需要修改,否则不能够启动会报端口已被使用
# 我这里设置的是8898,8006
vim server.xml
# 启动第二台tomcat
./startup.sh

实现后缀不同的80端口的跳转。

访问:http://192.168.233.129:80/tomcat1是实现第1台tomcat跳转

访问:http://192.168.233.129:80/tomcat2是实现第2台tomcat跳转

# 修改nginx.conf,这是单独起了一个server模块
server{
        listen 90;
        server_name  192.168.233.129;
        location ~ /t1{
            proxy_pass http://192.168.233.129:8899;
        }
        location ~ /t2{
            proxy_pass http://192.168.233.129:8898;
        }
    }

nginx的新配置的监听90端口。此时采用~正则匹配的方式,匹配请求url中包含/t1或者/t2的请求,随后进行转发。

# tomcat和tomcat2中需要配置
cd /opt/tomcat/webapps/
mkdir t1
touch a.html
# tomcat2同上

进行访问

Nginx学习,不妨看一下
tomcat1
Nginx学习,不妨看一下
tomcat2

由上述结果可以知道反向代理对于服务器内部路径转发实现了。

4.3 Location配置说明

Location主要用于匹配URL

location [= | ~ | ~* | ^~]{

}
  • =:用于不含正则表达式的URI前,要求请求字符串与URI严格匹配,如果匹配成功,则停止继续向下搜索并立即处理当前请求
  • ~:用于表示URI包含正则表达式,并且区分大小写
  • ~*:用于表示URI包含正则表达式,并且不区分大小写
  • ^~:用于不含正则表达式的URI前面,要求Nginx服务器找到标识URI和请求字符串匹配度最高的Location后立即使用location处理请求,而不再使用Location块中的正则URI和请求字符串做匹配

4.4 Nginx负载均衡

负载均衡的意思是多个请求可以被两台机器进行处理,从而减轻一台机器处理多个请求的压力。

准备工作

# 修改nginx.conf
# 在http模块中添加
upstream myserver{
 server 192.168.233.129:8999;
 server 192.168.233.129:8998;
}
# 在后续的location中添加
location / {
 root html;
 proxy_pass http://myserver;
 index index.html index.htm;
}
# 在tomcat两台服务器的webapps中
mkdir tc
touch a.html
# 写入内容即可

最后访问http://192.168.233.129/tc/a.html则会发现在两台服务器之间进行轮询切换。

其余策略的话可以参考上述的**负载均衡**策略介绍

负载均衡load balance,是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。

快速增长的访问量和数据流量催生了各种各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件很受欢迎,nginx就是其中一个,另外还有LVS、Haproxy等等服务可以提供负载均衡服务。Nginx主要可以提供轮询、加权、Ip哈希、URL哈希(第三方)、fair(第三方,需要额外安装)等方式的负载均衡。

4.5 Nginx动静分离

Nginx的动静分离策略则是依据的对静态资源和动态资源执行不同的转发以及获取,好让不同的服务器各自的内容进行解析,加快解析

这里动静分离则采用图片与网址的转发。

具体的配置,首先需要启动tomcat服务器,其次修改nginx.conf文件,具体配置如下:

location /image{
    alias /usr/local/images/;
    autoindex on;
}
location ~ /t1{
    proxy_pass http://192.168.233.129:8899;
}
Nginx学习,不妨看一下
动态资源
Nginx学习,不妨看一下
静态资源

结果如上图,这种也是我们很多时候下载的时候的镜像类似的目录结构,镜像将静态资源直接公布,我们可以直接访问和下载。

4.6 Nginx高可用实践

Nginx的高可用指代的是Nginx在多台服务器协同作用的情况下,如果主服务器挂了,此时如何保证服务继续是可用的,即当主服务器挂了,此时可以快速的切换到从服务器,升级从服务器为主服务器,从而保证服务的继续稳定运行。

高可用的话我这里就不做实践了(自己只装了一台虚拟机,利用docker启动了两台centos容器,但是装了nginx之后,启动keepalived服务总是启动不了,错误的话百度了很多,也没解决。)

这里贴一下准备了两台机器的高可用实践的步骤。

# 准备两台安装好nginx的机器
# 安装keepalived
yum install keepalived -y
# 修改keepalived配置文件
vim /etc/keepalived/keepalived.conf

配置文件

# 配置文件修改
global_defs {
   notification_email {
      1315020626@qq.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server mail.example.com
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script chk_nginx{
   # 这里配置的启动脚本
   script "/etc/keepalived/check_nginx.sh"
   interval 2
   weight 2
}
vrrp_instance VI_1 {
    state BACKUP # 主配置state MASTER
    interface eth0
    virtual_router_id 51
    priority 90 # 权重,注意从的一定要小于主,主配置priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟的ip地址
    virtual_ipaddress {
      172.17.0.210    
    }
}

启动脚本

#!/bin/bash
A=`ps -ef | grep nginx | grep -v grep | wc -l`
if [ $A -eq 0 ];then
    nginx
    sleep 2
    if [ `ps -ef | grep nginx | grep -v grep | wc -l` -eq 0 ];then
        #killall keepalived
        ps -ef|grep keepalived|grep -v grep|awk '{print $2}'|xargs kill -9
    fi
fi
# 启动keepalived服务
systemctl start keepalived.service
# 查看状态
systemctl status keepalived.service
# 启动主从nginx
./nginx

5. Nginx的原理解析

利用ps -ef | grep nginx可以看到具体的主进程与工作进程

Nginx学习,不妨看一下
img
Nginx学习,不妨看一下
master和worker
Nginx学习,不妨看一下
客户端请求nginx的过程示意图

5.1 master和worker进程机制

master和worker机制的好处

  • 对于每个worker进程来说,都是独立的进程,不需要加锁,所以省掉了加锁的开销,同时对于编程以及问题定位的时候,会方便很多
  • 采用独立的进程,互相之间不受影响,一个进程推出以后,其他进程还在工作,服务不会中断,master进程很快可以启动新的worker进程
  • worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有的请求,所以降低了风险

5.2 worker个数设置

worker个数的设置也是一个重要的问题,Nginx与Redis一样采用了IO多路复用的机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是上千上万个请求也不在话下,每个worker进程中的线程可以把CPU的性能发挥到极致。

worker个数建议与CPU个数设置为相同即可,设置少了会浪费CPU,设置多个会造成CPU频繁执行上下文切换带来损耗。

# 设置worker数量
worker_processes 4
# worker绑定(4CPU模式下)
worker cpu_affinity 0001 0010 0100 1000
# worker绑定(8CPU模式下)
worker cpu_affinity 00000001 00000010 00000100 00001000

5.3 worker_connection设置

worker连接数表示一个worker支持的最大连接建立的数量,则一个nginx能够建立的最大连接的数量为worker_connection*worker_processes,这是指代的最大的连接数量,对于HTTP请求本地资源来说,能够支持的最大并发的数量为worker_connection*worker_processes

如果是支持http/1.1浏览器每次访问占用两个连接,所以普通的静态访问最大并发数是worker_connection*worker_processes/2,而如果是HTTP作为反向代理来说,最大的并发数量是worker_connection*worker_processes/4,因为作为反向代理服务器,每个并发会建立与客户端和后端服务器的连接,会占用两个连接。

6. 实践

主要的实践则是通过云服务器上的SSL整数,通过nginx给云服务器加上https模式的访问,同时对自己之前写的两个后台服务进行一个服务的转发从而避免直接使用端口访问服务。

这里主要参考腾讯云官方的文档Nginx服务证书安装,注意如果想要给自己的相关后端服务进行转发,需要保证在后端服务中有相应的url访问,否则仅凭端口访问的是无法去执行转发的。

具体步骤

# 在腾讯云的ssl证书管理处下载自己申请的域名证书(免费版时长一年)将文件放置到服务器ssl文件夹下面
# 修改配置nginx配置文件,这里可能由于安装的时候没有携带ssl的相关配置,需要重新配置编译安装nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
# 修改配置文件
    server {
        listen       80;
        server_name  aaroncao.top;
        return 301 https://$host$request_uri;
 }
 
 #
 HTTPS server
    server {
        listen       443 ssl;
        server_name  aaroncao.top;
  # 证书放置的位置
        ssl_certificate     /usr/local/nginx/ssl/1_aaroncao.top_bundle.crt ;
        ssl_certificate_key  /usr/local/nginx/ssl/2_aaroncao.top.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;      

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

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
Nginx学习,不妨看一下
设置成功的https

上述完成了,因为自己写的两个后端服务都是按照端口直接访问的,例如简易版图床AaronCao图床,以及套用开源博客模板的个人博客AaronCoding。对端口的反响代理服务都要基于url来,因为nginx在做反向代理的时候假如你给/test做了反向代理,则配置了proxy_pass转发之后会变成proxy_pass/test/xxx等相关的网址。

参考尚硅谷Nginx教程(nginx快速上手) https://www.bilibili.com/video/BV1zJ411w7SV

7. 小结

本次nginx的学习和上次差不多,感觉虽然不是很难,但是很多细节要是想要处理好也不是那么简单的事情,还是要在实践中去夯实自己,后续还需要加油,nginx相关的命令感觉平时用的挺多,虽然在平时开发的时候一般只是改动或者添加部分url进行相应的服务器接口的转发,nginx -s reload重载配置文件,nginx -t检测配置文件是否有误,./nginx启动nginx等命令感觉用的比较多,还需要继续加油!

Keep thinking, keep coding! 2021年1月20日11:15:26写于江西九江,加油!

公众号

以上是关于Nginx学习,不妨看一下的主要内容,如果未能解决你的问题,请参考以下文章

linux学习:Nginx--常见功能配置片段与优化-06

如何学习大型项目的源码?虚幻引擎源码学习思路分享

AI大神李沐开源新手剪辑神器!只看字幕就能剪视频,卡壳重复片段一键删除...

想要提高PPT的排版,不妨使用形状试试,效果很赞

学习计划 nginx 中 php的配置详解

nginx学习十三 初始fork和nginx守护进程ngx_daemon