ngnix详解以及LNMP的搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ngnix详解以及LNMP的搭建相关的知识,希望对你有一定的参考价值。

一、nginx 介绍

技术分享

1.1 特性:

模块化设计,较好的扩展性

高可靠性

支持热部署:不停机更新配置文件,升级版本,更换日志文件

低内存消耗:10000 个keep-alive 连接模式下的非活动连接,仅需要2.5M 内存

event-driven,aio,mmap,sendfile

基本功能:

静态资源的web 服务器

http 协议反向代理服务器,负载均衡

pop3/imap4 协议反向代理服务器

FastCGI(lnmp),uWSGI(python) 等协议

模块化(非DSO ),如zip ,SSL模块

web 服务相关的功能:

虚拟主机(server

支持 keep-alive 和管道连接

访问日志(支持基于日志缓冲提高其性能)

url rewirte

路径别名

基于IP 及用户的访问控制

支持速率限制并发数限制

重新配置和在线升级而无须中断客户的工作进程

Memcached 的GET 接口

?

1.2 nginx 架构

?

技术分享

nginx 的程序架构 :

master/worker 结构

一个master 进程:

负载加载和分析配置文件、管理worker 进程、平滑升级

一个或多个worker 进程

处理并响应用户请求

缓存相关的进程:

cache loader :载入缓存对象

cache manager:管理缓存对象

?

1.3 nginx 高度模块化

但其模块早期不支持DSO 机制;1.9.11版本支持动态装载和卸载

模块分类:

核心模块:core module

标准模块:

? HTTP : 模块: ngx_http_*

HTTP Core modules 默认功能

HTTP Optional modules 需编译时指定

? Mail 模块 ngx_mail_*

? Stream 块 模块 ngx_stream_*

第三方模块

?

1.4 nginx 的功用

静态的web 资源服务器

html,图片,js ,css ,txt 等静态资源

结合FastCGI/uWSGI/SCGI 等协议反向代理动态资源请求

http/https 协议的反向代理

imap4/pop3 协议的反向代理

tcp/udp 协议的请求转发(反向代理)

?

?

二、nginx 目录结构和命令

2.1 nginx 命令

ls /usr/local/nginx/

html 是测试页,sbin 是主程序

ls /usr/local/nginx/sbin/

nginx 只有一个程序文件

ls /usr/local/nginx/html/

50x.html index.html 测试网页

Nginx :默认为启动nginx

-h 查看帮助选项

-V 查看版本和配置选项

-t 测试nginx 语法错误

-c filename 指定配置文件(default: /etc/nginx/nginx.conf)

-s signal 发送信号给master 进程,signal 可为:

stop, quit,reopen, reload 示例:-s stop 停止nginx -s reload 加载配置文件

注意:不要和systemctl 混合使用

-g directives 在命令行中指明全局指令

?

2.2 配置文件的组成部分:

主配置文件:nginx.conf

子配置文件 include conf.d/*.conf

fastcgi,uwsgi ,scgi 等协议相关的配置文件

mime.types :支持的mime 类型

主配置文件的配置指令:

directive value [value2 ...];

注意:

(1) 指令必须以分号结尾

(2) 支持使用配置变量

内建变量:由Nginx 模块引入,可直接引用

自定义变量:由用户使用set 命令定义

set variable_name value;

引用变量:$variable_name

?

三、nginx 主配置文件的介绍和设置

3.1 Main 全局配置段常见的配置指令分类

3.1.1 介绍

- 正常运行必备的配置

- 优化性能相关的配置

- 用于调试及定位问题相关的配置

- 事件驱动相关的配置

3.1.2 一些设置

user nginx; //nginx运行时是以谁的身份开启的子进程

worker_processes auto; //进程数,auto是自动和CPU核数相对应

worker_priority number; //指定worker 进程的nice 值,设定worker 进程优先级:[-19,19]

error_log /var/log/nginx/error.log info; //错误日志的路径和级别

pid /var/run/nginx.pid; //指定存储nginx 主进程PID 的文件路径

include file //指明包含进来的其它配置文件片断

events {

worker_connections 30000; //每个worker 进程所能够打开的最大并发连接数数量,默认是1024,一般都不够,调大

use epoll; //指明并发连接请求的处理方法, 默认自动选择最优方法

}

accept_mutex on/off; //前台|后台运行

技术分享

?

3.2 http 协议段的相关配置

格式介绍

http { //可以放多个server段

... ...

server {

...

server_name

root

location [OPERATOR] /uri/ {

...

}

}

server {

...

}

}

?

3.3 与套接字相关的配置

(1)server 配置虚拟主机

server {

listen address[:PORT]|PORT;

server_name SERVER_NAME;

root /PATH/TO/DOCUMENT_ROOT;

}

技术分享

?

(2)listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]

default_server 设定为默认虚拟主机

ssl 限制仅能够通过ssl 连接提供服务

backlog=number 超过并发连接数后,新请求进入后援队列的长度

rcvbuf=size 接收缓冲区大小

sndbuf=size 发送缓冲区大小

注意:

① 基于port;

listen PORT; 指令监听在不同的端口

② 基于ip 的虚拟主机

listen IP:PORT; IP 地址不同

③ 基于hostname

server_name fqdn; 指令指向不同的主机名

?

(3)server_name name ...;

虚拟主机的主机名称后可跟多个由空白字符分隔的字符串

支持* 通配任意长度的任意字符

server_name *.magedu.com www.magedu.*

支持~ 起始的字符做正则表达式模式匹配,性能原因慎用

server_name ~^www\\d+\\.magedu\\.com$

\\d 表示 [0-9]

匹配优先级机制从高到低:

① 首先是字符串精确匹配 如:www.magedu.com

左侧* 通配符 如:*.magedu.com

右侧* 通配符 如:www.magedu.*

④ 正则表达式 : 如: ~^.*\\.magedu\\.com$ ,因为消耗cpu运算

⑤ default_server

?

(4)tcp_nodelay on | off; 在长连接的情况下,是否延迟

在keepalived 模式下的连接是否启用TCP_NODELAY 选项

当为off 时,延迟发送,合并多个请求后再发送

默认On 时,不延迟发送

可用于:http, server, location

?

(5)sendfile on | off;

是否启用sendfile 功能,在内核中封装报文直接发送,默认Off

?

(6)server_tokens on | off | build | string

是否在响应报文的Server 首部显示nginx版本

?

3.4 定义路径相关的配置

(7)root

设置web 资源的路径映射;用于指明请求的URL 所对应的文档的主目录路径,可用于http, server, location, if in location

server {

...

root /data/www/vhost1;

}

示例

http://www.magedu.com/images/logo.jpg --> /data/www/vhosts/images/logo.jpg

注意:root 不仅可以用在server段,还可用于http、server、location、if in locatin

?

(8)location [ = | ~ | ~* | ^~ ] uri { ... } 主要控制URL路径

location @name { ... }

在一个server 中location 配置段可存在多个,用于实现从uri到文件系统的路径映射;ngnix 会根据用户请求的URI 来检查定义的所有location ,并找出一个最佳匹配,而后应用其配置

示例:

① server {...

server_name www.magedu.com;

location /images/ {

root /data/imgs/;

}

}

http://www.magedu.com/images/logo.jpg --> /data/imgs/images/logo.jpg

② = :对URI 做精确匹配;

location = / {

...

}

http://www.magedu.com/ 匹配

http://www.magedu.com/index.html 不匹配

③ 正则符号的作用

^~ :对URI 的最左边部分做匹配检查,不区分字符大 小写

~ :对URI 做正则表达式模式匹配,区分字符大小写

~* :对URI 做正则表达式模式匹配,不区分字符大小写

不带符号:匹配起始于此uri 的所有的uri

④ 匹配优先级从高到低:

=, ^~, ~/ ~*, 不带符号

技术分享

?

(9)alias path;

路径别名,文档映射的另一种机制;仅能用于location 上下文

示例:

http://www.magedu.com/bbs/index.php

location /bbs/ {

alias /web/forum/;

} --> /web/forum/index.html

location /bbs/ {

root /web/forum/;

} --> /web/forum/bbs/index.html

注意:location 中使用root 指令和alias 指令的意义不同

(a) root ,给定的路径对应于location 中的/uri/ 侧的/

(b) alias ,给定的路径对应于location 中的/uri/ 侧的/,完全置换

?

(10)index file ...;

指定默认网页资源,注意:ngx_http_index_module 模块

例:index index.php index.html

?

(11)error_page code ... [=[response]] uri; 错误页面

模块:ngx_http_core_module

定义错误页, 以指定的响应状态码进行响应

可用位置:http, server, location, if in location

error_page 404 /404.html

error_page 404 =200 /404.html 错误状态码改为200,还是原来的错误页面

技术分享

?

(12)try_files file ... uri;

try_files file ... =code;

按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹),如果所有的文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI 的指向。最后一个参数是回退URI 且必须存在,否则会出现内部500 错误

location /images/ {

try_files $uri /images/default.gif;

}

location / {

try_files $uri $uri/index.html $uri.html =404;

}

技术分享

?

3.5 定义客户端请求的相关配置

(13)keepalive_timeout timeout [header_timeout];

设定保持长连接超时时长,0 表示禁止长连接,默认为75s

技术分享

?

(14)keepalive_requests number;

一次长连接上所允许请求的资源的最大数量,默认为100

?

(15)keepalive_disable none | browser ... 略,没有那么老版本的浏览器

对哪种浏览器禁用长连接

(16)send_timeout time;

向客户端发送响应报文的超时时长,此处是指两次写操作之间的间隔时长,而非整个响应过程的传输时长

?

(17)client_body_buffer_size size; 缓存,hash值,取32位的后1位,2位,2位做几级目录

用于接收每个客户端请求报文、上传的body 部分的缓冲区大小;默认为16k超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置

?

(18)client_body_temp_path path [level1 [level2 [level3]]];

设定用于存储客户端请求报文的body 部分的临时存储路

径及子目录结构和数量

目录名为16 进制的数字;

client_body_temp_path /var/tmp/client_body 1 2 2

1 1 级目录占1 位16进 进 制,即2^4=16录 个目录 0-f

2 2 级目录占2 位16 进制 ,即2^8=256录 个目录 00-ff

2 3级 级 目录占2 位16进 进 制,即 即2^8=256个 个录 目录 00-ff

技术分享

?

3.6 对客户端进行限制的相关配置

(19)limit_rate rate; 限速

限制响应给客户端的传输速率,单位是bytes/second,默认值0表示不限速

?

(20)limit_except method ... { ... } ,仅用于location,限制客户端使用除了指定的请求方法之外的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {

allow 192.168.1.0/24;

deny all;

} 除了GET 和HEAD 之外 其它方法 仅允许192.168.1.0/24网段主机

技术分享

?

3.7文件操作优化的配置

(21)aio on | off | threads[=pool]; 是否启用aio 异步io功能,异步写磁盘

(22)directio size | off; 是否同步(直接)写磁盘,而非写缓存,在Linux 主机启用O_DIRECT 标记, 则文件大于等于给定大小时使用,例如directio 4m

(23)open_file_cache off;

open_file_cache max=N [inactive=time];

nginx 可以缓存以下三种信息:

① 文件元数据文件的描述符、文件大小和最近一次的修改时间

打开的目录结构

没有找到的或者没有权限访问的文件的相关信息

max=N :可缓存的缓存项上限;达到上限后会使用LRU (最近最少使用)算法实现管理

inactive=time :缓存项的非活动时长,在此处指定的时长内未被命中的或命中的次数少于open_file_cache_min_uses 指令所指定的次数的缓存项,即为非活动项 , 将被删除

(24)open_file_cache_errors on | off;

是否缓存查找时发生错误的文件一类的信息 ,默认值为off

(25)open_file_cache_min_uses number;

open_file_cache 指令的inactive 参数指定的时长内,至少被命中此处指定的次数方可被归类为活动 项,默认值为1

(26)open_file_cache_valid time;

缓存项有效性的检查频率,默认值为 为60s

?

?

四、重要常用的配置

4.1 权限控制

ngx_http_access_module 模块 ,实现基于ip 的访问控制功能

① allow address | CIDR | unix: | all;

② deny address | CIDR | unix: | all;

http, server, location, limit_except 段,都能使用

自上而下检查,一旦匹配,将生效,条件严格的置前

示例:

location / {

deny 192.168.1.1;

allow 192.168.1.0/24;

allow 10.1.1.0/16;

allow 2001:0db8::/32;

deny all;

}

技术分享

?

4.2 身份验证

ngx_http_auth_basic_module 模块,实现基于用户的访问控制,使用basic 机制进行用户认证

① auth_basic string | off;

② auth_basic_user_file file;

location /admin/ {

auth_basic "Admin Area"; "提示字"

auth_basic_user_file /etc/nginx/.ngxpasswd;

}

技术分享

用户口令文件:

① 明文文本:格式name:password:comment

② 加密文本:由htpasswd 命令实现,httpd-tools 包所提供

技术分享

?

4.3 状态信息页面

ngx_http_stub_status_module 模块,用于输出nginx 的基本状态信息

① 设置

技术分享

② 输出信息示例:

Active connections: 291

server accepts handled requests

16630948 16630948 31070465 三个数字分别对应accepts,handled,requests 三个值

Reading: 6 Writing: 179 Waiting: 106

技术分享

③ 定义

Active connections: 当前状态,活动状态的连接数

accepts :统计总值,已经接受的客户端请求的总数

handled :统计总值,已经处理完成的客户端请求的总数

requests :统计总值,客户端发来的总的请求数

Reading :当前状态,正在读取客户端请求报文首部的连接的连接数

Writing :当前状态,正在向客户端发送响应报文过程中的连接数

Waiting:当前状态,正在等待客户端发出请求的空闲连接数

?

4.4 日志的设置

ngx_http_log_module 模块,指定日志格式记录请求

log_format name string ...; 定义日志格式

string 可以使用nginx 核心模块及其它模块内嵌的变量

② access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]]; 调用日志

access_log 路径 日志名 ;

访问日志文件路径,格式及相关的缓冲的配置

buffer=size 缓存大小

flush=time 多长时间清除缓存

示例:

log_format compression ‘$remote_addr-$remote_user [$time_local] ‘

‘"$request" $status $bytes_sent ‘

‘"$http_referer" "$http_user_agent" "$gzip_ratio"‘;

access_log /spool/logs/nginx-access.log compression buffer=32k;

技术分享

③ 略:open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];

open_log_file_cache off;

缓存各日志文件相关的元数据信息

max :缓存的最大文件描述符数量

min_uses :在inactive 指定的时长内访问大于等于此值方

可被当作活动项

inactive :非活动时长

valid: 验证缓存 中各缓存项是否为活动项的时间间隔

?

4.5 压缩

ngx_http_gzip_module 用gzip 方法压缩响应数据,节约带宽,默认没有设置开启

gzip on | off;

启用或禁用gzip 压缩

gzip_comp_level level;

压缩比由低到高:1 到 9,默认:1

③ gzip_disable regex ...;

匹配到客户端浏览器不执行压缩

gzip_min_length length;

启用压缩功能的响应报文大小

⑤ gzip_http_version 1.0 | 1.1;

设定启用压缩功能时,协议的最小版本,默认:1.1

gzip_buffers number size;

支持实现压缩功能时缓冲区数量每个缓存区的大小,默认:324k 或 168k

gzip_types mime-type ...;

指明仅对哪些类型的资源执行压缩操作;即压缩过滤器

默认包含有text/html不用显示指定,否则出错

查看nginx的mime类型:cat /etc/nginx/mime.types

⑧ gzip_vary on | off;

如果启用压缩,是否在响应报文首部插入"Vary: Accept-Encoding"

⑨ gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;

nginx:对于代理服务器请求的响应报文,在何种条件下启用压缩功能

off :对被代理的请求不启用压缩

expired,no-cache, no-store ,private :对代理服务器请求的响应报文首部Cache-Control 值任何一个,启用压缩功能

示例:

gzip on;

gzip_comp_level 6;

gzip_min_length 64;

gzip_proxied any;

gzip_types text/xml text/css application/javascript;

技术分享

测试压缩效果:

技术分享

?

4.6 ssl 加密的实现

https ssl 的实现

(1)server 里的选项:

1 、ssl on | off;

为指定虚拟机启用HTTPS protocol,建议用listen 指令代替

2 、ssl_certificate file;

当前虚拟主机使用PEM 格式的证书文件路径

3 、ssl_certificate_key file;

当前虚拟主机上与其证书匹配的私钥文件路径

4 、ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];

支持ssl 协议版本,默认为后三个

5 、ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

builtin[:size] :使用OpenSSL 内建缓存,为每worker 进程私有

[shared:name:size] :在各worker 之间使用一个共享的缓存

6、ssl_session_timeout time;

客户端连接可以复用ssl session cache 中缓存的ssl 参数的有效时长,默认5m

示例:

server {

listen 443 ssl;

server_name www.magedu.com;

root /vhosts/ssl/htdocs;

ssl on; //可省略

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

ssl_session_cache shared:sslcache:20m;

ssl_session_timeout 10m;

}

技术分享

?

4.7 地址重写

ngx_http_rewrite_module 模块:

The ngx_http_rewrite_module module is used to change request URI using PCRE regular expressions,return redirects, and conditionally select configurations.

将用户请求的URI 基于PCRE regex 所描述的模式进行检查,而后完成重定向替换

示例:

http://www.magedu.com/hn --> http://www.magedu.com/henan

http://www.magedu.com --> https://www.magedu.com/

(1)rewrite regex replacement [flag]

将用户请求的URI 基于regex 所描述的模式进行检查,匹配到时将其替换为replacement 指定的新的URI

注意:如果在同一级配置块中存在多个rewrite 规则,那么会自下而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查

隐含有循环机制, 但不超过10 次;如果超过,提示500响应码,[flag] 所表示的标志位用于控制此循环机制

如果replacement 是以http:// 或https:// 开头,则替换结果会直接以重向返回给客户端

301 :永久重定向 302:临时重定向

技术分享

分析:目录跳转,正则匹配到zz开头的,都永久重定向到zhengzhou,且后边的uri不变,如:index.html,

[flag]:

① last :重写完成后停止对当前URI 在当前location 中后续的其它重写操作,而后对新的URI 启动新一轮重写检查;提前重启新一轮循环,不建议在lation 中使用

② break :重写完成后停止对当前URI 在当前location 中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location 中使用

redirect :临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URI 给客户端,由客户端重新发起请求;不能以http:// 或https:// 开头,使用相对路径,状态码:302

permanent: 重写完成后以永久重定向方式直接返回重写后生成的新URI 给客户端,由客户端重新发起请求,状态码 :301

?

(2)return

return code [text]; 例:return 403 "error";

return code URL; 例:return 302 http://www.baidu.com/;

return URL; 例:return http://www.baidu.com/;

停止处理,并返回给客户端指定的响应码

技术分享

例:连续跳转,image永久重定向到img,img又跳到www.baidu.com

location /image {

rewrite ^/image/(.*)$ /img/$1 permanent;

}

location /img {

return http://www.baidu.com/ ;

}

(3)rewrite_log on | off; 把跳转的信息写到日志中

是否开启重写日志, 发送至error_log (notice level)

(4)set $variable value;

用户自定义变量,注意:变量定义和调用都要以$ 开头

(5)if (condition) { ... }

引入新的上下文, 条件满足时,执行配置块中的配置指令;server, location

condition:

比较操作符:

== 相同

!= 不同

~ :模式匹配,区分字符大小写

~* :模式匹配,不区分字符大小写

!~ :模式不匹配,区分字符大小写

!~* :模式不匹配,不区分字符大小写

文件及目录存在性判断:

-e, !-e 存在(包括文件,目录,软链接)

-f, !-f 文件

-d, !-d 目录

-x, !-x 执行

技术分享

?

实验一:搭建lnmp及类小米等商业网站的实现

环境:关闭防火墙,selinux

1、安装包,开启服务

yum -y install nginx mariadb-server php-fpm php-mysql

systemctl start nginx

systemctl start mariadb

systemctl start php-fpm

?

2、修改nginx的配置文件

cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf 有个模板例子覆盖了配置文件

vim /etc/nginx/nginx.conf 修改下面几类

① user nobody; 使用用户

error_log /var/log/nginx/error.log info; 错误日志

?

② events {

worker_connections 65535;

}

?

③ tcp_nopush on; tcp优化

tcp_nodelay on;

gzip on;

?

④ server {

listen 80;

server_name xiaomi.along.com; 根据自己顺便写

root /data/web; 主站点的目录根

location / {

index index.php index.html index.htm;

}

?

⑤ location ~ \\.php$ { 开启.php,配置文件有例子,只需去掉注释,修改一行即可

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

?

修改完,可以nginx -t 查看

systemctl restart nginx 重启服务,发现有warn

ulimit -n 查看linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值

ulimit -n 65535 修改内核参数

?

3、修改php-fpm的配置文件

vim /etc/php.ini 改两行

date.timezone = Asia/Shanghai 时区

short_open_tag = On 允许短标签

?

vim /etc/php-fpm.d/www.conf 改两行

user = nobody

group = nobody

?

systemctl restart php-fpm

?

4、运行mysql ,创建一会网页需要的库

create database xiaomi;

?

5、把事先找好的小米网站传进来 rz

mkdir /data/web -p 创建一个目录专门放小米的网页配置

unzip -d /data/web/ xiaomi.zip 解压到目录

cd /data/web/

chown -R nobody.nobody * 为了安全,递归把所有文件的所属人和所属组改为权限有限的nobody

?

6、网页登录

① 用户:admin

密码:123456

技术分享

② 参数设置:就是连接上自己的数据库

技术分享

也可以在命令行连上自己的数据库:

vim /data/web/data/config.php

技术分享

③ 把数据写到数据库中,恢复数据

技术分享

?

7、实验成功,登录查看

技术分享

后台登录,可以自己随便修改

http://192.168.30.107/admin

技术分享

?

8、ab 可以压力测试

?

实验二:实现ssl 加密

(1)一个物理服务器设置一个https

1、创建存放证书的目录

mkdir /etc/nginx/ssl

?

2、自签名证书

cd /etc/pki/tls/certs/

make nginx.crt

技术分享

openssl rsa -in nginx.key -out nginx2.key 因为刚私钥被加密了,为了后边方便,解密

?

3、把证书和私钥cp 到nginx存放证书目录

cp nginx.crt nginx2.key /etc/nginx/ssl/

cd /etc/nginx/ssl/

mv nginx2.key nginx.key 把名字改回来

?

?

4、修改配置文件,加一段server

server {

listen 443 ssl;

server_name www.along.com;

ssl on;

ssl_certificate /etc/nginx/ssl/nginx.crt;

ssl_certificate_key /etc/nginx/ssl/nginx.key;

ssl_session_cache shared:sslcache:20m;

ssl_session_timeout 10m;

}

技术分享

?

5、测试,网页打开 https://192.168.30.7/

技术分享

windows 信任证书

技术分享

?

(2)一个物理服务器设置多个https

因为nginx 强大,可以实现多个虚拟主机基于不同的FQDN 实现ssl加密,httpd不能实现

1、生成3个证书和私钥

make nginx.crt

make nginx2.crt

make nginx3.crt

技术分享

?

2、把证书和私钥cp 到nginx存放证书目录,并解开私钥的加密

cp nginx{1,2,3}* /etc/nginx/ssl/

openssl rsa -in nginx.key -out nginx.key

openssl rsa -in nginx2.key -out nginx2.key

openssl rsa -in nginx3.key -out nginx3.key

?

3、创建各自对应的访问网页

mkdir /app/website{1,2,3}

echo website1 > /app/website1/index.html

echo website1 > /app/website2/index.html

echo website1 > /app/website3/index.html

技术分享

?

4、测试访问,成功

以上是关于ngnix详解以及LNMP的搭建的主要内容,如果未能解决你的问题,请参考以下文章

LNMP搭建过程详解,验证搭建论坛

你真的了解LAMP/LNMP架构吗?(详解PHP和Apache和MariaDB之间的工作联系)以及安装php7,8版本。

腾讯云CentOS6.8搭建lnmp环境

ngnix配置文件详解ngnix.conf

LNMP中一些隐藏的安装脚本及目录详解

ngnix location指令详解