编辑
2022-09-10
nginx
00

目录

nginx简介
初识Nginx
一、Nginx的安装
二、配置文件详解
2.1 主配置文件分为四部分
2.2 配置文件格式说明
2.3 配置文件相关优化
三、案例:使用nginx实现反向代理的动静分离
3.1 流程图
3.2 配置
Nginx的用法还有很多,比如反向代理的负载均衡,使用upstream,添加两个服务器。rewrite重定向80端口到443端口,return指定URL等功能。后面的文章里在一一说明。

nginx简介

初识Nginx

Nginx是由俄罗斯国立莫斯科鲍曼科技大学在1994年毕业的学生为俄罗斯rambler.ru公司开发的,开发工作最早从2002年开始,第一次公开发布时间是2004年10月4日,版本号是0.1.0

2019年3月11日F5 与 NGINX达成协议,F5 将收购 NGINX 的所有已发行股票,总价值约为 6.7 亿美元。6.7亿美金约合44.97亿人民币,nginx核心模块代码长度198430(包括空格、注释),所以一行代码约为2.2万人民币

官网地址 www.nginx.org

Nginx历经十几年的迭代更新(https://nginx.org/en/CHANGES), 目前功能已经非常完善且运行稳 定,分为社区版本和商业版,另外Nginx的社区版本分为开发版(奇数)、最新稳定版(偶数)和过期 版,nginx以功能丰富著称,它即可以作为http服务器,也可以作为反向代理服务器或者邮件服务器,能 够快速的响应静态网页的请求,支持FastCGI/SSL/Virtual Host/URL Rwrite/Gzip/HTTP Basic Auth/http 或者TCP的负载均衡(1.9版本以上且开启stream模块)等功能,并且支持第三方的功能扩展。 天猫 淘宝 京东 小米 163 新浪等一线互联网公司都在用Nginx或者进行二次开发

为什么nginx在linux上安装就比windows上块?为什么nginx比其他web服务有优势?

  1. windows只支持select的I/O模型,最大并发限制1024。
  2. poll模型是linux的基本模型,windows不支持,是select的升级版
  3. epoll模型是Nginx服务器支持的最高性能的事件驱动库之一,是公认的非常优秀的事件驱动模型,它和select和poll有很大的区别,epoll是poll的升级版,但是与poll有很大的区别.epoll的处理方式是创建一个待处理的事件列表,然后把这个列表发给内核,返回的时候在去轮询检查这个表,以判断事件是否发生,epoll支持一个进程打开的最大事件描述符的上限是系统可以打开的文件的最大数,同时epoll库的I/O效率不随描述符数目增加而线性下降,因为它只会对内核上报的“活跃”的描述符进行操作。

Nginx功能:

  • 静态的web资源服务器html,图片,js,css,txt等静态资源
  • http/https协议的反向代理
  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求
  • tcp/udp协议的请求转发(反向代理)
  • imap4/pop3协议的反向代理

Nginx进程:
Nginx是多进程模型,是由一个Master主进程和Worker工程进程组成

Master主进程:

  • Master对外是接收外部的操作信号,对内根据操作的不同,通过信号管理Worker
  • 读取Nginx 配置文件并验证其有效性和正确性
  • 接受外界指令,比如重启、升级及退出服务器等指令
  • 不中断服务,实现平滑升级,重启服务并应用新的配置

Worker工作进程:

  • 所有Worker进程都是平等的
  • Work进程数一般和CPU核心数一致,充分利用CPU资源
  • 接受主进程指令,比如重启、升级和退出等

Nginx启动和http建立连接:

  • Nginx启动时,Master进程加载配置文件
  • Master初始化监听的socket
  • Master主进程fork出多个Worker进程
  • Worker竞争新的连接,获取方通过三次握手建立Socket连接并处理请求

一、Nginx的安装

工作中不建议使用通过源安装的方式,很多第三方模块都无法使用,不方便业务上的一些使用。而且源安装的方式版本比较旧。

源安装

rhel系列:yum -y install nginx 注:centos7需要提前配置好epel源,yum -y install epel-release debian系列: apt -y install nginx

编译安装:

sh
#1、安装编译的相关包 yum -y install gcc pcre-devel openssl-devel zlib-devel #2、创建用户 useradd -s /sbin/nologin nginx #3、下载软件包到本机 wget http://nginx.org/download/nginx-1.20.0.tar.gz #4、解包进入目录 tar xf nginx-1.20.0.tar.gz;cd nginx-1.20.0/ #5、编译,--prefix是指定安装目录,--user和--group是指定用户和组,后面的--with都是模块,要使用必须在编译的时候加上 ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module #6、安装 make && make install;chown -R nginx.nginx /apps/nginx #7、编译安装是没有nginx.service文件的,需要手动创建,可参考源安装方式的nginx.service文件 cat /lib/systemd/system/nginx.service [Unit] Description=The nginx HTTP and reverse proxy server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/apps/nginx/logs/nginx.pid ExecStartPre=/bin/rm -f /apps/nginx/logs/nginx.pid ExecStartPre=/apps/nginx/sbin/nginx -t ExecStart=/apps/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true LimitNOFILE=100000 [Install] WantedBy=multi-user.target #8、加载service文件并设为开机自启 systemctl daemon-reload;systemctl enable --now nginx

二、配置文件详解

配置文件位置

1、包安装的配置文件在/etc/nginx/nginx.conf
2、编译安装的看具体安装文件,这里是/apps/nginx/conf/nginx.conf
3、也可在主配置文件中添加子配置文件目录,在最后一个花括号前添加 include /apps/nginx/conf.d/*.conf;

2.1 主配置文件分为四部分

nginx
main block:主配置段,即全局配置段,对http,mail都有效 #事件驱动相关的配置 event { ... } #http/https 协议相关配置段 http { ... } #默认配置文件不包括下面两个块 #mail 协议相关配置段 mail { ... } #stream 服务器相关配置段 stream { ... }

2.2 配置文件格式说明

nginx
#全局配置端,对全局生效,主要设置nginx的启动用户/组,启动的工作进程数量,工作模式,Nginx的PID路径,日志路径等。 user nginx nginx; worker_processes 1; #启动工作进程数数量 events { #events设置快,主要影响nginx服务器与用户的网络连接,比如是否允许同时接受多个网络连接,使用哪种事件驱动模型处理请求,每个工作进程可以同时支持的最大连接数,是否开启对多工作进程下的网络连接进行序列化等。 worker_connections 1024; #设置单个nginx工作进程可以接受的最大并发,作为web服务器的时候最大并发数为worker_connections * worker_processes,作为反向代理的时候为(worker_connections * worker_processes)/2 } http { #http块是Nginx服务器配置中的重要部分,缓存、代理和日志格式定义等绝大多数功能和第三方模块都可以在这设置,http块可以包含多个server块,而一个server块中又可以包含多个location块,server块可以配置文件引入、MIME-Type定义、日志自定义、是否启用sendfile、连接超时时间和单个链接的请求上限等。 include mime.types; default_type application/octet-stream; sendfile on; #作为web服务器的时候打开sendfile加快静态文件传输,指定是否使用sendfile系统调用来传输文件,sendfile系统调用在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了数据在内核缓冲区和用户缓冲区之间的拷贝,操作效率很高,被称之为零拷贝,硬盘 >>kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈。 keepalive_timeout 65; #长连接超时时间,单位是秒 server { #设置一个虚拟机主机,可以包含自己的全局快,同时也可以包含多个location模块。比如本虚拟机监听的端口、本虚拟机的名称和IP配置,多个server 可以使用一个端口,比如都使用80端口提供web服务、listen 80; #配置server监听的端口server_name localhost; #本server的名称,当访问此名称的时候nginx会调用当前serevr内部的配置进程匹配。 location / { #location其实是server的一个指令,为nginx服务器提供比较多而且灵活的指令,都是在location中体现的,主要是基于nginx接受到的请求字符串,对用户请求的UIL进行匹配,并对特定的指令进行处理,包括地址重定向、数据缓存和应答控制等功能都是在这部分实现,另外很多第三方模块的配置也是在location模块中配置。 root html; #相当于默认页面的目录名称,默认是安装目录的相对路径,可以使用绝对路径配置。 index index.html index.htm; #默认的页面文件名称 } error_page 500 502 503 504 /50x.html; #错误页面的文件名称 location = /50x.html { #location处理对应的不同错误码的页面定义到/50x.html,这个跟对应其server中定义的目录下。 root html; #定义默认页面所在的目录 } } #和邮件相关的配置 #mail { # ... # } mail 协议相关配置段 #tcp代理配置,1.9版本以上支持 #stream { # ... # } stream 服务器相关配置段 #导入其他路径的配置文件 #include /apps/nginx/conf.d/*.conf }

2.3 配置文件相关优化

nginx
#1、更改记录日志格式 http { #以json格式记录nginx访问日志 log_format access_json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' #客户端IP '"size":$body_bytes_sent,' '"responsetime":$request_time,' #总的处理时间 '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' #后端应用服务器处理时间 '"http_host":"$host",' '"uri":"$uri",' '"xff":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"tcp_xff":"$proxy_protocol_addr",' '"http_user_agent":"$http_user_agent",' '"status":"$status"}'; access_log /apps/nginx/logs/access_json.log access_json; } #2、其他 sendfile on; #开启文件高效传输模式 tcp_nopush on;当有数据时,先别着急发送, 确保数据包已经装满数据, 避免了网络拥塞,和sendfile一起开启 keepalive_timeout 60; #超时时间 gzip on;#开启gzip压缩 gzip_comp_level 5;#压缩比1-9,默认1 gzip_min_length 1k;#压缩文件的最小值 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/gif image/png; gzip_vary on;#响应报文头部插入Vary:Accept-Encoding,一般建议打开 client_max_body_size 200M; #允许最大上传文件

三、案例:使用nginx实现反向代理的动静分离

3.1 流程图

反向代理流程图.jpg

3.2 配置

10.0.0.8:

nginx
vim /apps/nginx/conf/conf.d/static.conf location / { proxy_pass http://10.0.0.28; index index.html; } location ~ \.php$ { root /data/php; fastcgi_pass 10.0.0.18:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

10.0.0.18:

sh
安装php环境,使用yum -y install php-fpm即可,安装完毕后打开服务,systemctl start php-fpm

10.0.0.28:

sh
#安装apache yum -y install httpd #启动服务 systemctl start httpd #使用默认页面即可

Nginx的用法还有很多,比如反向代理的负载均衡,使用upstream,添加两个服务器。rewrite重定向80端口到443端口,return指定URL等功能。后面的文章里在一一说明。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:笑一个吧~

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 本文为博主「笑一个吧~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 许可协议。转载请注明出处!