Nginx部署

linux和windows平台常见的web服务器

  • Apache,(国企性质,要求技术栈不需要那么先进,没有大量的流量,只需要系统架构稳定即可)

  • nginx(主流的互联网公司都选择使用nginx,京东,美团,斗鱼,网易)

  • Lighttpd(性能非常接近nginx的一款web server,主要是老外在用)

  • Tomcat(应用服务器,java做程序解析)

  • IBM(websphere)

    windows平台下的

    • llS()internet information server )

    apache

    1
    apache是世界主流的web服务器,大部分网站都是apache搭建的,优势是开放源代码,开发维护的团队很强大,有好几十年的历史,apche支持跨平台应用(1inux,unix,windows)但是apache属于重量级的产品,功能都是以模块化定制,且它的工作模式,占用的内存资源过多,对系统消耗很大,性能也稍弱于nginx

    Lighttpd

    1
    是一款高性能,高安全性,快速,且配置灵活的web服务器产品,,专门为高流量的网站设计,相比其他各款web服务器,内有占用量极小,能够提供有效的API,对cPU负载情况管理,支持后台请求转发,astcgi,scgi,资源压缩,ur1重写,别名等等通能,它是nginx的重头对手之一

    tomcat

    1
    tomcat汤姆猫是一个开源,运行基于java的一个web应用服务器,主要根据serverlet进行执行,但是tomcat对于平台文件,静态文件,高并发处理还是较弱,因此也是和nginx,apache结合使用。想要使用tomcat应用服务器,需要掌握基本的java环境部署等等

    IIS

    1
    和nginx,apache,lightttp有哪些区别呢?IIS支持图形化操作,毕竟是在windows平台,通过鼠标点击就可以完成网站配置功能还是很强大,但是只能运行在windows平台

    Nginx

    1
    是俄罗斯人开发出的一款高性能 HTTP web服务器,支持反向代理,负载均衡,资源压缩,ur1重写,网站跳转等等功能nginx以高效的1inux网络模型,epo11,event,作为网络I0模型,kqueue,在高并发网站情况下,nginx能够轻松支持5w+的并发流量,并且消耗的服务器内存,cpu等资源,也是很低的,运行起来非常稳定。

    开源: 直接获取源代码
    高性能: 支持海量并发
    可靠: 服务稳定

我们为什么选择Nginx服务
Nginx非常轻量

nginx的优势:高并发、IO多路复用、epoll模型、异步、非阻塞

功能模块少 (源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装)
代码模块化 (易读,便于二次开发,对于开发人员非常友好)
互联网公司都选择Nginx

1.Nginx技术成熟,具备的功能是企业最常使用而且最需要的
2.适合当前主流架构趋势, 微服务、云架构、中间层
3.统一技术栈, 降低维护成本, 降低技术更新成本。

Nginx采用Epool网络模型,Apache采用Select模型
Select: 当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。
Epool: 当用户发起请求,epool模型会直接进行处理,效率高效,并无连接限制。

技术架构

1
2
3
4
5
6
7
8
收费技术栈:             redhat + jqurey+js+svn +oracle +tomcat +java + apache
省钱,走向开源技术栈: centos + jquery +js + git + mysql + java+tomcat +pythontperl+ nginx

美企,比较有钱

有钱的大公司,自己造机房,买服务器,数据都由自己管控,自己招聘IDC机房运维,1inux系统运维,头条,百团,苹果中等公司,外企,自己购买服务器,服务器放在专业的机房托管(内部的内网业务,也有在自己公司搭建小型的服务器机房)

小型公司,选择云服务器,是最经济实惠

Nginx快速安装
Nginx的安装方式
1.源码编译=>Nginx (1.版本随意 2.安装复杂 3.升级繁琐 4.规范 5.便于管理)
2.epel仓库=>Nginx (1.版本较低 2.安装简单 3.配置不易读)
3.官方仓库=>Nginx (1.版本较新 2.安装简单 3.配置易读)

Nginx官方仓库安装

官方安装步骤,进入nginx官网
documentation——>Installing nginx——>packages——>RHEL and derivatives

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1、配置yum源
yum install yum-utils
2、创建yum配置文件
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
3、安装nginx
yum install nginx -y
4、systemcl start nginx
5、systemctl enable nginx
6、在浏览器输入ip看到测试页面即可
7、nginx -V 查看版本

Nginx的启停

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.Nginx启动
[root@m01 ~]# /usr/sbin/nginx
[root@m01 ~]# systemctl start nginx


2.Nginx停止
[root@m01 ~]# /usr/sbin/nginx -s stop
[root@m01 ~]# systemctl stop nginx

3.Nginx重启
[root@m01 ~]# systemctl restart nginx

4.Nginx重载
[root@m01 ~]# /usr/sbin/nginx -s reload
[root@m01 ~]# systemctl reload nginx

Nginx配置文件

1.Nginx主配置文件

路径 类型 作用
/etc/nginx/nginx.conf 配置文件 nginx主配置文件
/etc/nginx/conf.d/default.conf 配置文件 默认网站配置文件

2.Nginx代理相关参数文件

路径 类型 作用
/etc/nginx/fastcgi_params 配置文件 Fastcgi代理配置文件
/etc/nginx/scgi_params 配置文件 scgi代理配置文件
/etc/nginx/uwsgi_params 配置文件 uwsgi代理配置文件

3.Nginx编码相关配置文件

路径 类型 作用
/etc/nginx/win-utf 配置文件 Nginx编码转换映射文件
/etc/nginx/koi-utf 配置文件 Nginx编码转换映射文件
/etc/nginx/koi-win 配置文件 Nginx编码转换映射文件
/etc/nginx/mime.types 配置文件 Content-Type与扩展名

4.Nginx管理相关命令

路径 类型 作用
/usr/sbin/nginx 命令 Nginx命令行管理终端工具
/usr/sbin/nginx-debug 命令 Nginx命令行与终端调试工具

5.Nginx日志相关目录与文件

路径 类型 作用
/var/log/nginx 目录 nginx默认存放日志目录
/etc/logrotate.d/nginx 配置文件 Nginx默认的日志切割

nginx主配置文件讲解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
cat /etc/nginx/nginx.conf  
# 核心模块
user nginx; #启动nginx1的用户
worker_processes auto; # nginxworker进程数 auto是根据服务器的cpu核心数自行判断
error_log /var/log/nginx/error.log; # 错误日志的路径和文件名称
pid /var/run/nginx.pid; #nginx进程的pid

#事件驱动模块
events {
worker_connections 1024; #每个worker进程支持的最大连接数,过多的连接会导致nginx性能下降、负载过高
use epoll; #事件驱动模型, epoll默认 apache的驱动模块select
nginx使用epol能够高效处理大量的并发;提高了服务器的性能和稳定性
- 性能优势
同对比select等其他事件驱动
epol在处理大规模并发事件的时候,表现优异
提高服务器的性能和稳定性
}

# HttpCoreModule(http内核模块),每一个server定义了一个虚拟主机和网站配置
http {
#定义了名为main日志的格式
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 /var/log/nginx/access.log main;

sendfile on; #高效文件传输,将文件内容从磁盘直接发送到客户端
tcp_nopush on; #搭配sendfile一起使用
tcp_nodelay on; #搭配sendfile一起使用
keepalive_timeout 65; #长连接,超时时间60s
types_hash_max_size 4096;

include /etc/nginx/mime.types; #nginx相关的配置的类型配置文件。用于确定如何处理请求中的文件类型
default_type application/octet-stream;#默认类型 如果请求中没有文件类型,nginx会默认使用他作为文件类型

#nginx网址相关的编写路径和文件格式
include /etc/nginx/conf.d/*.conf;

server {
listen 80; #nginx默认的端口
listen [::]:80;
server_name _; #提供的域名
root /usr/share/nginx/html; #站点目录,存放网址代码的目录

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; #存放额外的nginx配置文件,使得配置更加清晰,易于管理

error_page 404 /404.html;
location = /404.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
1
2
3
4
5
6
7
8
9
10
11
12
#server层,用于定义虚拟主机的配置,和客户端的http请求
server {
listen 80; #告诉nginx在80端口上监听传入http的请求
server_name 172.16.1.7; #通过server name制定所匹配的主机名/IP地址
charset utf-8;
location / { #使用来自该服务器的请求都会被这个配置处理
root /www/lol/; #指定服务器的/目录
index index.html; #指定默认的索引文件
}
}

指定了虚拟主机的主机名,当请求的域名是php.web.com的时候就会应用改服务器块的配置

nginx日志配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
相关指令
log_format 日志格式
access.log 访问日志
error.log 错误日志
open_log_file_cache 日志缓存

日志的格式和命令
# 日志格式允许包含的变量
vim /etc/nginx/nginx.conf
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 /var/log/nginx/access.log main;

$remote_addr 用户使用的设备的ip地址
$remote_user 远程用户:记录客户端用户的名称
[$time_local] 本地时间:用户访问网站的时间
$request 记录请求的URL和HTTP协议,用户访问的网站 访问3段 动作/内容/版本
$status 状态:记录请求状态,一般由3为数组成,叫状态码
200 此处访问完成成功,用户需要的信息服务器已给出
404
$body_bytes_sent 发送给客户端的文档体积,不包括响应头的大小
$http_referer 引用:记录从哪个页面链接访问过来的 (超链接)
$http_user_agent 用户用什么浏览器访问的
$http_x_forwarded_for 代理ip

为什么nginx不能以root身份运行?

1
2
3
4
5
6
7
8
9
10
11
12
13
 为什么nginx不能以root身份运行?
身root拥有最高的权限,会带来系统的安全性能,还有一些危险的操作,提高了攻击面
- 系统安全
如果work进程以root身份运行时,网站被攻击,攻击方拥有极大的控制权,造成严重的安全威胁
- 权限过大
root身份运行时,可以访问系统的资源和文件
导致系统进行未授权的操作/访问敏感信息,增加受到恶意攻击得的面
-危险操作
root身份权限极高,比如修改系统配置,对我的系统产生系统崩溃,数据丢失
- 提高了攻击面
提高了攻击的渗透机会

nginx的版本要隐藏,因为攻击者要工具版本信息找到隐藏的漏洞

简单的部署网页

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
1、编辑配置文件
[root@web01 ~]# cat /etc/nginx/conf.d/asm.conf
server {
listen 80;
server_name www.asm.com;
root /code;
index index.html;
}

2、检查语法
nginx -t
nginx: the configuration file /opt/nginx-1.26.0/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx-1.26.0/conf/nginx.conf test is successful

3、准备站点目录
mkdir /code

4、准备索引文件
[root@web02 nginx-1.26.0]# echo 123 > /code/index.html
[root@web02 nginx-1.26.0]# cat /code/index.html
123

5、重新加载nginx
systemctl reload nginx
6、检查进程,检查端口
[root@web02 nginx-1.26.0]# ps -ef | grep nginx
root 13755 1 0 11:38 ? 00:00:00 nginx: master process
/usr/sbin/nginx
nginx 13757 13755 0 11:38 ? 00:00:00 nginx: worker process
root 13762 6942 0 11:39 pts/0 00:00:00 grep --color=auto nginx
[root@web02 nginx-1.26.0]# netstat -lntup | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
13755/nginx: master
tcp6 0 0 :::80 :::* LISTEN
13755/nginx: master

7、本地DNS解析
windows键 + r 输入drivers,找到etc并进入,找到hosts编辑文件
10.0.0.7 www.asm.com

8、使用浏览器输入域名成功访问即可

Nginx搭建小游戏网站

(游戏代码的下载地址) http://test.driverzeng.com/Nginx_Code/h5_games.zip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1、编辑配置文件,并检测语法
[root@web01 ~]# cat /etc/nginx/conf.d/asm.conf
server {
listen 80;
server_name www.asm.com;
root /code;
index index.html;
}

2、准备站点目录
mkdir /code

4、准备游戏代码
cd /code
wget http://test.driverzeng.com/Nginx_Code/h5_games.zip

5、解压代码
cd /code
unzip h5_games.zip

6、检测nginx
nginx -t
nginx: the configuration file /opt/nginx-1.26.0/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx-1.26.0/conf/nginx.conf test is successful

7、重新加载检查端口
systemctl reload nginx

8、使用浏览器输入域名成功访问即可
image-20240522153552120