nginx系列01--nginx简介和安装

本系列nginx版本均为Stable version 1.12.0,系统为Centos7.9

Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的 请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或 HTTPS(安全超文本传输协议)把请求的内容传送给用户。

目前能够提供 Web 网络服务的程序有 IIS、Nginx 和 Apache 等。其中,IIS(Internet Information Services,互联网信息服务)是 Windows 系统中默认的 Web 服务程序

2004 年 10 月 4 日, Nginx 横空出世。 Nginx 程序作为一款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但 Nginx 最被认可的还是系统资源消耗低且并发能力强,因此使用者众多。

  • web服务器(nginx):接收HTTP请求并返回数据
  • web框架(django,flask):开发web应用程序,处理接收到的数据

Nginx介绍

nginx是一个开源的、支持高性能、高并发的www服务和代理服务软件。它是俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用。
nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。2万并发、10个线程,内存消耗几百M。安装更为简单,方便,灵活。
支持高并发,能支持几万并发连接,资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M;可以做http反向代理和负载均衡;支持异步网络i/o事件模型epoll。

可以提供的服务:

  • web服务
  • 负载均衡(反向代理)
  • web cache(web缓存)

Tengine介绍

Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。

安装

先解决环境依赖问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
一. gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++ -y
二. PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
yum install -y pcre pcre-devel
三. zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
yum install -y zlib zlib-devel
四. OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
yum install -y openssl openssl-devel

也可以执行一揽子安装语句:

1
yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y

安装nginx

下载源码包

1
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz

解压缩源码

1
tar -zxvf nginx-1.12.0.tar.gz

进入解压后的文件夹,配置编译安装,开启nginx状态监测功能

1
2
3
cd nginx-1.12.0
./configure --prefix=/opt/nginx112/
make && make install

编译成功:

image-20220217111104287

安装成功

image-20220217111233543

查看nginx版本:

1
2
[root@iZ8vbavndeiwj2ctanxb49Z nginx-1.12.0]# /opt/nginx112/sbin/nginx -v
nginx version: nginx/1.12.0

启动nginx

1
2
3
4
5
6
7
cd /opt/nginx112/sbin/
./nginx #启动
或者
/opt/nginx112/sbin/nginx
./nginx -s stop #关闭
./nginx -s reload #重新加载配置文件
./nginx -s reopen #重启nginx

查询启动是否成功

1
ps -ef|grep nginx

启动成功后访问页面,输入你的公网IP:

image-20220217112025112

修改path

1
2
vim /etc/profile
PATH=$PATH:/opt/nginx112/

创建 Nginx 运行使用的用户 www:

1
2
[root@iZ8vbavndeiwj2ctanxb49Z conf]# /usr/sbin/groupadd www 
[root@iZ8vbavndeiwj2ctanxb49Z conf]# /usr/sbin/useradd -g www www

nginx软件目录

1
2
3
4
[root@iZ8vbavndeiwj2ctanxb49Z nginx112]# pwd
/opt/nginx112
[root@iZ8vbavndeiwj2ctanxb49Z nginx112]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
  • conf 存放nginx所有配置文件的目录,主要nginx.conf

  • html 存放nginx默认站点的目录,如index.html、error.html等

  • logs 存放nginx默认日志的目录,如error.log access.log

  • sbin 存放nginx主命令的目录,sbin/nginx

Nginx主配置文件/opt/nginx112/conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。

CoreModule核心模块:

  • user www www; #Nginx进程所使用的用户
  • worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或auto)
  • error_log /opt/nginx112/logs/error.log crit #Nginx错误日志日志位置和日志级别,日志级别: debug > info > notice > warn > error > crit > alert > emerg
  • pid /opt/nginx112/logs/nginx.pid #Nginx服务运行后产生的pid进程号

events事件模块

  • worker_connections 1024; //每个worker进程支持的最大连接数
  • use epool; //事件驱动模型, epoll默认

http内核模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//公共的配置定义在http{}
http { //http层开始
...
//使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机)
'server' {
listen 80; //监听端口, 默认80
server_name localhost; //提供服务的域名或主机名
access_log host.access.log //访问日志
//控制网站访问路径
'location' / {
root /usr/share/nginx/html; //存放网站代码路径
index index.html index.htm; //服务器返回的默认页面文件
}
//指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
error_page 500 502 503 504 /50x.html;
}
...
//第二个虚拟主机配置
'server' {
...
}
include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件
} //http层结束

一份完整配置的文件

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
user www www;
worker_processes 2; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

#charset gb2312;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;

sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;
#下面是server虚拟主机的配置
server
{
listen 80;#监听端口
server_name localhost;#域名
index index.html index.htm index.php;
root /usr/local/webserver/nginx/html;#站点目录
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
# access_log off;
}
location ~ .*\.(js|css)?$
{
expires 15d;
# access_log off;
}
access_log off;
}

}

检查配置文件nginx.conf的正确性命令:

1
2
3
[root@iZ8vbavndeiwj2ctanxb49Z run]# /opt/nginx112/sbin/nginx -t
nginx: the configuration file /opt/nginx112//conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx112//conf/nginx.conf test is successful

建立软连接:

1
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

部署nginx站点

nginx默认站点是Nginx目录下的html文件夹,这里可以从nginx.conf中查到

1
2
3
4
location /{
root html; #这里是默认的站点html文件夹,也就是/opt/nginx1-12/html/文件夹下的内容
index index.html index.html; #站点首页文件名是index.html
}

如果要部署网站业务数据,只需要把开发好的程序全放到html目录下即可

1
2
ls /opt/nginx112/html/
index.html jssts.jpeg lhy.mp4 man.jpg wget-log

因此只需要通过域名/资源,即可访问

1
http://www.xxx.com/man.jpg

效果如下:

image-20220217183501677

下一章我将详解nginx.conf。

如果觉得写的还行,赞助瓶脉动~
0%