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服务有优势?
Nginx功能:
Nginx进程:
Nginx是多进程模型,是由一个Master主进程和Worker工程进程组成
Master主进程:
Worker工作进程:
Nginx启动和http建立连接:
工作中不建议使用通过源安装的方式,很多第三方模块都无法使用,不方便业务上的一些使用。而且源安装的方式版本比较旧。
源安装
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;
nginxmain block:主配置段,即全局配置段,对http,mail都有效 #事件驱动相关的配置 event { ... } #http/https 协议相关配置段 http { ... } #默认配置文件不包括下面两个块 #mail 协议相关配置段 mail { ... } #stream 服务器相关配置段 stream { ... }
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 }
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; #允许最大上传文件
10.0.0.8:
nginxvim /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
#使用默认页面即可
本文作者:笑一个吧~
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 本文为博主「笑一个吧~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 许可协议。转载请注明出处!