nginx的官网:nginx.org
nginx简介
nginx是利用C语言编写的一款免费且开源的轻量级的web服务器/反向代理服务器以及电子邮件(IMPA/POP3)代理服务器
nginx是一款专门为性能而生的,特点是占用内存少,并发能力强,与同类的web软件来说表现较好。
nginx的工作模型是epoll模型(异步非阻塞模型)I/O多路复用技术,可以利用等待的时间去接收更多的请求。
什么是异步非阻塞模型:
在讲异步非阻塞模型之前先搞清楚什么是同步、异步、阻塞、非阻塞。
同步:就是当用户去访问一个网站的时候,这时候服务器就会启动一个进程,服务器将你想要的数据返回给你之后。这个进程才会结束,在数据给用户之前这个进程会一直处于运行状态且一直去找数据不会做其他什么事。简单来说就是一对一的提供服务。
异步:异步和同步相对,就是在处理用户请求的过程中,服务器可以去做其他的事,等用户想要的数据处理好之后服务器将用户想要的数据给用户。简单来说就是服务器在提供服务的时候能去服务下一个用户。当上一个用户想要的数据得到之后便会将数据给用户
阻塞:阻塞与同步类似,但是不等同于同步,阻塞就是用户发出请求,在用户请求没有得到解决之前线程会被挂起(线程处于挂起状态)一直等到用户得到数据后才会做其他事。
非阻塞:阻塞与非阻塞事相对的,就是说用户请求的数据,服务器会给用户提供想要的数据,在给用户提供数据的期间可以做其他事。
I/O多路复用
- I/O就是我们网络的I/O,多路是指多个TCP连接,复用是指复用一个或少量的线程。就是多个网络I/O去复用一个或少量的线程或者说进程
部署nginx
下载nginx的源码包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.20.1.tar.gz
解决nginx的依赖
[root@localhost ~]# yum -y install pcre-devel gcc openssl-devel zlib make
因为nginx使用C语言编写的所以需要安装gcc
pcre支持正则表达式、zlib支持头压缩、openssl支持HTTPS协议
因为后面编译时需要用到make命令
解压nginx的rpm包
[root@localhost ~]# tar -xzf nginx-1.20.1.tar.gz
nginx的源码存放的目录:
这个nginx.c的文件里面就是nginx的源代码
安装nginx
在编译安装nginx时如果你不指定,系统会帮你自动安装一些功能。但有的模块不会安装就是以--with开头的模块。会自动安装的模块是以--without开头的模块
解压完成之后会自动生成一个nginx目录,然后我们进到这个目录里面去。
[root@localhost ~]# cd nginx-1.20.1/
[root@localhost nginx-1.20.1]# ls
auto CHANGES.ru configure html man src
CHANGES conf contrib LICENSE README
不指定会默认按装到/usr/local/nginx目录下,如果想指定安装路径可以使用下面的命令
[root@localhost nginx-1.18.0]# ./configure --prefix= //路径名
[root@localhost nginx-1.20.1]# ./configure --with-http_ssl_module
这个--with-http_ssl_module模块时用来做加密网站的。因为加密网站是遵守的https的协议
将https这个协议添加 到 HTTP 服务器
这只是其中一种模块,更多模块请访问官方网站:http://nginx.org/en/docs/configure.html
还有一个模块也算是常用模块就是--sbin-path=path,这模块用来修改nginx可执行文件的名称。默认是prefix/sbin/nginx
在configure命令配置编译时需要用到的选项可以去官方文档里面去找:http://nginx.org/en/docs/configure.html
也可以使用./configure --help命令
进行编译安装
[root@localhost nginx]# make
[root@localhost nginx]# make install
nginx主目录下各个目录的作用
/usr/local/nginx/ #为服务安装目录
/usr/local/nginx/sbin #为服务主程序目录
/usr/local/nginx/sbin/nginx #为服务程序文件
/usr/local/nginx/modules/ #为模块目录
/usr/local/nginx/conf/ #为服务的配置文件目录
/usr/local/nginx/html/ # 为服务网页根目录
/usr/local/nginx/conf/nginx.conf #为服务配置文件
/usr/local/nginx/logs/ #为服务日志文件目录
/usr/local/nginx/logs/nginx.pid #服务pid文件
/usr/local/nginx/logs/error.log #服务错误日志文件
/usr/local/nginx/logs/access.log #服务访问日志文件
nginx服务相关的命令
/usr/local/nginx/sbin/nginx 启动nginx
/usr/local/nginx/sbin/nginx -v #查看nginx版本
/usr/local/nginx/sbin/nginx -V #显示除版本信息意外的其他配置参数信息
/usr/local/nginx/sbin/nginx -t #检查nginx配置文件是否正确
/usr/local/nginx/sbin/nginx -s reload #重新加载nginx
/usr/local/nginx/sbin/nginx -s quit #正常关闭nginx,建议使用这种方式关闭nginx
/usr/local/nginx/sbin/nginx -s stop #快速关闭nginx
在nginx的配置文件里面可以修改字符集使他支持的html的页面支持中文
[root@localhost conf]# pwd
/usr/local/nginx/conf
将第39行的注释取消把koi8-r换成UTF-8
[root@localhost conf]# vim nginx.conf
35 server {
36 listen 80;
37 server_name localhost;
38
39 #charset koi8-r;
当修改配置文件之后要时配置文件立即生效就可以使用下面这条命令,且不会停止服务
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload
查看nginx进程表
[root@localhost ~]# ps anx | grep nginx
98920 ? Ss 0:00 nginx: master process sbin/nginx #这个是nginx的主进程负责检查服务的配置信息,启动、终止、控制并维护worker进程
98922 ? S 0:00 nginx: worker process #这个时nginx的工作进程用来接收和处理用户的连接
184634 pts/1 S+ 0:00 grep --color=auto nginx
nginx配置文件的解释
[root@localhost conf]# vim nginx.conf
[root@localhost conf]# pwd
/usr/local/nginx/conf
配置文件存放路径
2 #user nobody; //指定以哪个用户的身份去运行
3 worker_processes 1; //nginx默认启动进程的数量,1个进程占用10-20M的内存,这里的进程数建议和本机的cpu核数保持一致即可,若在生产环境中就改为 auto,就时让其自动增长
5 #error_log logs/error.log; //全局的错误日志文件
6 #error_log logs/error.log notice; //日志通知
7 #error_log logs/error.log info; //日志信息
9 #pid logs/nginx.pid; //nginx Pid存放位置
12 events {
13 worker_connections 1024;
14 }
一个进程可以并发接收1024个用户访问,也就是同时打开1024个网页让用户去访问
在生产环境中建议改为65535
17 http {
18 include mime.types; //调用其他的配置文件
19 default_type application/octet-stream; //默认文件类型,默认的时二进制类型
21 #log_format main '$remote_addr - $remote_user [$time_local] "$reque st" ' //日志文件的输出格式
22 # '$status $body_bytes_sent "$http_referer" '
23 # '"$http_user_agent" "$http_x_forwarded_for"'; //nginx需要使用的模块
25 #access_log logs/access.log main; //访问日志的路径,main就是输出格式
27 sendfile on; //高效文件传输模式,提高数据的传输速度
28 #tcp_nopush on; //防止网络阻塞的功能
30 #keepalive_timeout 0;
31 keepalive_timeout 65;
保持客户端和服务端连接的时间,默认时间为65s,当用户在服务端65秒内没有进行操作那么就自动断开连接。
33 #gzip on; //压缩文件的格式,可以指定什么类型的文件进行压缩。
35 server { //虚拟主机的配置
36 listen 80; //nginx默认监听80端口
37 server_name localhost; //指定网站域名
39 #charset koi8-r; //可以用来修改字符集
41 #access_log logs/host.access.log main; //访问日志的位置,格式为main输出格式
43 location / { //匹配用户的地址栏
44 root html; //指向nginx网页文件的根目录,root在这里是一个指令。
45 index index.html index.htm; //nginx的默认首页
46 }
48 #error_page 404 /404.html; //当用户访问一个不存在的网页时返回的页面
50 # redirect server error pages to the static page /50x.html
51 #
52 error_page 500 502 503 504 /50x.html;
53 location = /50x.html {
54 root html;
55 }
这里时报错50x的优化页面的地方
57 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
58 #
下面三行是用来做反向代理的
59 #location ~ \.php$ {
60 # proxy_pass http://127.0.0.1;
61 #}
这里是构建lnmp架构时,用来修改php页面的
96 # HTTPS server //这个地方是用来做加密网站的