Nginx

Posted lyshark

tags:

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

**************************************************************************************************
◆案例1◆ 编译安装nginx
**************************************************************************************************

1.配置yum源,安装依赖

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum -y install epel-release

yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel


2.编译安装Nginx

useradd -s /sbin/nologin -M nginx

wget http://nginx.org/download/nginx-1.13.12.tar.gz

tar -xzvf nginx-1.13.12.tar.gz

cd nginx-1.13.12/

./configure --prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_stub_status_module

make && make install


3.启动-关闭-重启Nginx

/usr/local/nginx/sbin/nginx -t #检测配置文件正确性
/usr/local/nginx/sbin/nginx #启动Nginx

kill -QUIT $(cat /usr/local/nginx/logs/nginx.pid) #关闭Nginx
kill -HUP $(cat /usr/local/nginx/logs/nginx.pid) #重启Nginx


**************************************************************************************************
◆案例2◆ Nginx-实现身份验证 -- 基于用户名密码的认证
**************************************************************************************************

1.编辑Nginx主配置文件


编辑配置文件,在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

41 #access_log logs/host.access.log main;
42
43 location / { #对根站点,设置密码认证
44 root html; #主页位置,相对路径
45 index index.html index.htm; #主页执行顺序

★ auth_basic "welcome to admin"; #提示信息(自定义)
★ auth_basic_user_file /usr/local/nginx/html/login.pad; #生成的密码文件

46 }
47
48 #error_page 404 /404.html;
49
50 # redirect server error pages to the static page /50x.html

--------------------------------------------------------------------------------------------------------------

2.借助Apache的工具生成密码文件

yum install -y httpd

htpasswd -c /usr/local/nginx/html/login.pad lyshark #创建认证用户(覆盖)
htpasswd -m /usr/local/nginx/html/login.pad lyshark #写入认证用户(追加)


3.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


**************************************************************************************************
◆案例3◆ Nginx-实现身份验证 -- 基于IP的身份认证
**************************************************************************************************


1.编辑Nginx主配置文件


编辑配置文件,在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

41 #access_log logs/host.access.log main;
42
43 location / {
44 root html;
45 index index.html index.htm;

★ allow 192.168.1.10; #允许单个IP访问
★ deny 192.168.1.10; #拒绝单个IP访问
★ allow 0.0.0.0/0; #允许所有网段
★ deny 0.0.0.0/0; #拒绝所有网段

46 }
47
48 #error_page 404 /404.html;
49
50 # redirect server error pages to the static page /50x.html

--------------------------------------------------------------------------------------------------------------


2.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)

 

**************************************************************************************************
◆案例4◆ 配置Nginx虚拟主机(重点)
**************************************************************************************************

****************************************************************************
◆基于域名的虚拟主机◆ >>>实现一台服务器多个域名,搭建多个网站<<<
****************************************************************************


1.手动配置DNS<实验环境只做正向即可>

分别模拟两个域名 www.xdl.com和www.edu.com并解析到同一台主机上


2.编辑Nginx主配置文件


分别编辑两个主机区域,在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

35 server { #主机区域1(server1)
36 listen 80;
★ server_name www.xdl.com; #主机1服务器名(域名1)
38
39 location / {
★ root html/xdl; #域名1网页存放位置
41 index index.html index.htm;
42 }
43 error_page 500 502 503 504 /50x.html;
44 location = /50x.html {
45 root html;
46 }
47 }
48 server { #主机区域2(server2)
49 listen 80;
★ server_name www.edu.com; #主机2服务器名(域名2)
51
52 location / {
★ root html/edu; #域名2网页存放位置
54 index index.html index.htm;
55 }
56
57 error_page 500 502 503 504 /50x.html;
58 location = /50x.html {
59 root html;
60 }
61 }

--------------------------------------------------------------------------------------------------------------

3.在html目录下创建相应目录以及html文件

mkdir /usr/local/nginx/html/xdl/
mkdir /usr/local/nginx/html/edu/

echo "xdl server zone" > /usr/local/nginx/html/xdl/index.html
echo "edu server zone" > /usr/local/nginx/html/edu/index.html


4.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


****************************************************************************
◆基于端口的虚拟主机◆ >>>实现一台服务器多个端口,搭建多个网站<<<
****************************************************************************

1.手动配置DNS<实验环境只做正向即可>


配置DNS解析 www.lyshark.com 解析到本机


2.编辑Nginx主配置文件

分别编辑两个主机区域,在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

35 server { #主机区域1(server1)
★ listen 80; #主机1端口
★ server_name www.lyshark.com; #主机1服务器名(域名1)
38
39 location / {
★ root html/lyshark-80; #域名1网页存放位置
41 index index.html index.htm;
42 }
43 error_page 500 502 503 504 /50x.html;
44 location = /50x.html {
45 root html;
46 }
47 }
48 server { #主机区域2(server2)
★ listen 8080; #主机区域2端口
★ server_name www.lyshark.com; #主机2服务器名(域名2)
51
52 location / {
★ root html/lyshark-8080; #域名2网页存放位置
54 index index.html index.htm;
55 }
56
57 error_page 500 502 503 504 /50x.html;
58 location = /50x.html {
59 root html;
60 }
61 }

--------------------------------------------------------------------------------------------------------------

3.在html目录下创建相应目录以及html文件

mkdir /usr/local/nginx/html/lyshark-80/
mkdir /usr/local/nginx/html/lyshark-8080/


echo "xdl server zone" > /usr/local/nginx/html/lyshark-80/index.html
echo "edu server zone" > /usr/local/nginx/html/lyshark-8080/index.html


4.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)

 


****************************************************************************
◆基于IP的虚拟主机◆ >>>实现一台服务器多个IP地址,搭建多个网站<<<
****************************************************************************

1.配置一个网卡子接口

[[email protected] conf]# ifconfig

eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.12 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::20c:29ff:fe1e:14e2 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1e:14:e2 txqueuelen 1000 (Ethernet)
RX packets 40292 bytes 4129804 (3.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8962 bytes 1557264 (1.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

eno16777728:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.13 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:1e:14:e2 txqueuelen 1000 (Ethernet)


2.编辑Nginx主配置文件


分别编辑两个主机区域,在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

35 server {
★ listen 192.168.1.12:80; #指定区域1的IP地址
37 server_name localhost;
38
39 location / {
★ root html/192.168.1.12; #指定区域1的文件目录
41 index index.html index.htm;
42 }
43
44 error_page 500 502 503 504 /50x.html;
45 location = /50x.html {
46 root html;
47 }
48 }
49 server {
★ listen 192.168.1.13:80; #指定区域2的IP地址
51 server_name localhost;
52
53 location / {
★ root html/192.168.1.13; #指定区域2的文件目录
55 index index.html index.htm;
56 }
57
58 error_page 500 502 503 504 /50x.html;
59 location = /50x.html {
60 root html;
61 }
62 }

--------------------------------------------------------------------------------------------------------------

3.在html目录下创建相应目录以及html文件

mkdir /usr/local/nginx/html/192.168.1.12/
mkdir /usr/local/nginx/html/192.168.1.13/


echo "ip 1 server" > /usr/local/nginx/html/192.168.1.12/index.html
echo "ip 2 server" > /usr/local/nginx/html/192.168.1.13/index.html


4.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)

 

**************************************************************************************************
◆案例5◆ 配置Nginx反向代理服务器
**************************************************************************************************

1.修改Nginx主配置文件

在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

41 #access_log logs/host.access.log main;
42
43 location / {
44 root html; #注释掉
45 index index.html index.htm; #注释掉
★ proxy_pass http://192.168.1.100; #反向代理添加此处,当有人访问/时,自动转到100上
46 }
47
48 #error_page 404 /404.html;
49
50 # redirect server error pages to the static page /50x.html

--------------------------------------------------------------------------------------------------------------

2.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


**************************************************************************************************
◆案例6◆ Nginx实现简单的负载均衡
**************************************************************************************************

=====================================================================================
实验环境

Nginx负载均衡 192.168.1.12

Apache主机1 192.168.1.13
Apache主机2 192.168.1.14

实现效果

当用户访问Nginx负载均衡器时,Nginx将访问请求平均分配给后端的Apache服务器,实现负载均衡
=====================================================================================

1.修改Nginx主配置文件

在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

17 http {
18 include mime.types;
19 default_type application/octet-stream;
20 sendfile on;
21 keepalive_timeout 65;
22
★在下处填写负载均衡语句 <语句应写在http语句内并且是在server语句外填写>
★ upstream lyshark.com { #自定义区域名

★ server 192.168.1.13:80 weight 1; #负载均衡主机web1
★ server 192.168.1.14:80 weight 2; #负载均衡主机web2

★ server 192.168.1.15:80 weight 1 backup;
★ #backup表示机器处于热备状态,weight代表权重,权重越高使用越多!
★ }
31
32 server {
33 listen 80;
34 server_name localhost;
35
36 location / {
★ # root html; #注释掉
★ # index index.html index.htm; #注释掉
★ proxy_pass http://lyshark.com; #代理交给上面的自定义区域处理
40 }
41
42 error_page 500 502 503 504 /50x.html;
43 location = /50x.html {
44 root html;
45 }
46 }
47 }

--------------------------------------------------------------------------------------------------------------

2.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


**************************************************************************************************
◆案例7◆ Nginx实现https加密认证访问
**************************************************************************************************

1.安装软件依赖包

yum install -y pcre-devel zlib-devel openssl openssl-devel

2.建立服务器私钥,过程中需要输入密码

openssl genrsa -des3 -out server.key 1024

----------------------------------------------------------------------------
注释:
Genrsa –des3 #加密类型
-out server.key #输出文件
-1024 #加密长度
----------------------------------------------------------------------------

3.建立证书,生成的csr文件交给CA签名后形成服务端自己的证书

openssl req -new -key server.key -out server.csr

----------------------------------------------------------------------------
注释:
req -new #新建证书
-key server.key #私钥文件
-out server.csr #输出文件

注:依次输入:国家 省 市 组织 机构 全称 EMAIL 是否要改变密码 是否改名称
----------------------------------------------------------------------------

4.转化成证书,这一步由证书CA机构来做的,这里只是实验.

openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out servernew.crt


5.复制证书和密钥到Nginx目录下

cp -a server.key /usr/local/nginx/conf/server.key #复制密钥到conf目录下
cp -a servernew.crt /usr/local/nginx/conf/server.crt #复制证书到conf目录下


6.修改Nginx主配置文件

在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

 

33 #gzip on;
34
35 server {
★ listen 443; #修改端口为443
37 server_name localhost;
38
★ ssl on; #开启SSL加密
★ ssl_certificate server.crt; #证书位置
★ ssl_certificate_key server.key; #密钥位置
★ ssl_session_timeout 5m; #会话操作时间
★ ssl_protocols TLSv1; #协议版本
★ ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; #指定使用加密算法
★ ssl_prefer_server_ciphers on; #缓存开启
46
47 location / {
48 root html;
49 index index.html index.htm;
50 }
51
52 #error_page 404 /404.html;
53
54 # redirect server error pages to the static page /50x.html

--------------------------------------------------------------------------------------------------------------

7.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


8.访问地址

https://127.0.0.1:443


**************************************************************************************************
◆案例8◆ Nginx实现域名跳转
**************************************************************************************************

=====================================================================================

实验效果

将地址 http://127.0.0.1/index.html
跳转到 http://59.110.167.239/index.html

=====================================================================================

1.修改Nginx主配置文件

在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf


24 server {
25 listen 80;
26 server_name localhost;
27
28 #charset koi8-r;
29
30 #access_log logs/host.access.log main;
31
32 location / {
★ #root html; #注释掉
★ #index index.html index.htm; #注释掉
35
★ rewrite ^(.*)$ http://59.110.167.239 permanent; #实现地址全跳转(访问本机跳转到59.110.167.239上)
★ rewrite ^(.*)$ https://$host$1 permanent; #实现自身http到https的全跳转
37 }
38
39 #error_page 404 /404.html;
40
41 # redirect server error pages to the static page /50x.html

--------------------------------------------------------------------------------------------------------------

2.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


3.手动访问本机将跳转到指定地址

http://127.0.0.1/index.html


**************************************************************************************************
◆案例9◆ Nginx实现自身http到https的跳转配置
**************************************************************************************************

=====================================================================================
实验效果

用户访问http地址自动的跳转到https地址中去访问

访问地址 http://127.0.0.1/index.html
跳转到 https://127.0.0.1/index.html

=====================================================================================

1.安装软件依赖包

yum install -y pcre-devel zlib-devel openssl openssl-devel


2.建立服务器私钥,过程中需要输入密码

openssl genrsa -des3 -out server.key 1024


3.建立证书,生成的csr文件交给CA签名后形成服务端自己的证书

openssl req -new -key server.key -out server.csr


4.转化成证书,这一步由证书CA机构来做的,这里只是实验.

openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out servernew.crt


5.复制证书和密钥到Nginx目录下

cp -a server.key /usr/local/nginx/conf/server.key #复制密钥到conf目录下
cp -a servernew.crt /usr/local/nginx/conf/server.crt #复制证书到conf目录下


6.修改Nginx主配置文件

在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

17 http {
18 include mime.types;
19 default_type application/octet-stream;
20 sendfile on;
21 keepalive_timeout 65;
22
23 server {
24 listen 80;
25 server_name localhost;
26
27 location / {
★ #root html; 注释掉
★ #index index.html index.htm; #注释掉
★ rewrite ^(.*)$ https://$host$1 permanent; #实现自身http到https的跳转
31 }
32
33 error_page 500 502 503 504 /50x.html;
34 location = /50x.html {
35 root html;
36 }
37 }
38
39 server {
★ listen 443;
41 server_name localhost;
42
★ ssl on; #开启SSL加密
★ ssl_certificate server.crt; #证书位置
★ ssl_certificate_key server.key; #密钥位置
★ ssl_session_timeout 5m; #会话操作时间
★ ssl_protocols TLSv1; #协议版本
★ ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; #指定使用加密算法
★ ssl_prefer_server_ciphers on; #缓存开启
50
51 location / {
52 root html;
53 index index.html index.htm;
54
55 }
56
57 error_page 500 502 503 504 /50x.html;
58 location = /50x.html {
59 root html;
60 }
61 }
62 }

--------------------------------------------------------------------------------------------------------------

7.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


8.手动访问本机将跳转到指定地址


**************************************************************************************************
◆案例10◆ Nginx配置HSTS(提高安全性/了解即可)
**************************************************************************************************

1.在Https的Server站点添加如下头部

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";


2.在Http的Server站点添加相应代码

return 301 https://$host;


3.添加X-Frame-Options头部, 确保不会嵌入到Frame 或 iframe,避免点击劫持

add_header X-Frame-Options "DENY";


4.测试方法

chrome://net-internals/


**************************************************************************************************
◆实战项目◆ 实现简单企业服务器环境(带HTTPS认证+负载均衡)
**************************************************************************************************

=====================================================================================
实验环境

Nginx 反向代理 192.168.1.10
Web1 后端Apache1 192.168.1.20
Web2 后端Apache2 192.168.1.30


实验效果

配置Nginx加密(SSL)传输数据

客户访问http://www.lyshark.com
跳转到https://www.lyshark.com

两台web服务器实现压力均摊

实验过程

首先做http到https的跳转

紧接着在做负载均衡

=====================================================================================

1.配置DNS服务器

DNS服务器解析道本机Nginx服务器上

Nginx 192.168.1.12 解析成 www.lyshark.com


2.配置两台Apache服务器

Web1 192.168.1.13
Web2 192.168.1.14


3.安装并配置Nginx

a)生成证书与私钥

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out servernew.crt

b)复制证书和密钥到Nginx目录下

cp -a server.key /usr/local/nginx/conf/server.key
cp -a servernew.crt /usr/local/nginx/conf/server.crt


4.修改Nginx主配置文件,实现https加密认证与负载均衡

在相应的区域中加入以下标★语句
--------------------------------------------------------------------------------------------------------------
vim /usr/local/nginx/conf/nginx.conf

1 worker_processes 1;
2
3 events {
4 worker_connections 1024;
5 }
6
7
8 http {
9 include mime.types;
10 default_type application/octet-stream;
11 sendfile on;
12 keepalive_timeout 65;
13
=====================================================================================
#在此处填写负载均衡语句(在http语句内,server语句外填写)
★ upstream lyshark.com { #自定义区域名

★ server 192.168.1.13:80; #均衡主机1
★ server 192.168.1.14:80; #均衡主机2
★ }
=====================================================================================
19
20
21 server {
22 listen 80;
★ server_name www.lyshark.com; #本机域名
24
25 location / {
★ #root html; #注释掉
★ #index index.html index.htm; #注释掉
★ rewrite ^(.*)$ https://$host$1 permanent; #将http请求跳转到https
29 }
30
31 error_page 500 502 503 504 /50x.html;
32 location = /50x.html {
33 root html;
34 }
35 }
36
37 server {
★ listen 443; #修改端口
★ server_name www.lyshark.com; #本机域名
40
=====================================================================================
★ ssl on; #开启SSL加密
★ ssl_certificate server.crt; #证书位置
★ ssl_certificate_key server.key; #密钥位置
★ ssl_session_timeout 5m; #会话操作时间
★ ssl_protocols TLSv1; #协议版本
★ ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; #指定使用加密算法
★ ssl_prefer_server_ciphers on; #缓存开启
=====================================================================================
48
49 location / {
★ #root html; #注释掉
★ #index index.html index.htm; #注释掉
★ proxy_pass http://lyshark.com; #实现地址跳转,有80的请求转443
53 }
54
55 error_page 500 502 503 504 /50x.html;
56 location = /50x.html {
57 root html;
58 }
59 }
60 }
--------------------------------------------------------------------------------------------------------------

5.重启Nginx服务

kill -HUP $(cat /usr/local/nginx/logs/nginx.pid)


6.手动访问本机将跳转到指定地址

http://127.0.0.1/index.html

**********************************************************************************************************************
◆附加◆
**********************************************************************************************************************

开启nginx监控模块

写入 (约在47行)

location /lyshark { #查看时输入:http://*/lyshark
stub_status on;
}

源码编译修改版本号


vim nginx-1.13.12/src/core/nginx.h

#define nginx_version 1013012
#define NGINX_VERSION "1.13.12"
#define NGINX_VER "nginx/" NGINX_VERSION

修改版本后保存编译即可





























































































































































































































































































































































































































































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

NginxNginx配置REWRITE隐藏index.php

NginxNginx配置文件解析

NginxNginx基础操作

NginxNginx基础操作

NginxNginx基础操作

NginxNginx基础操作