nginx
1.nginx是什么
nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率。
nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用。
支持高并发,能支持几万并发连接
资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M
可以做http反向代理和负载均衡
支持异步网络i/o事件模型epoll
2.安装
2.1.安装环境准备
一. gcc 安装 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++ 二. PCRE pcre-devel 安装 yum install -y pcre pcre-devel 三. zlib 安装 yum install -y zlib zlib-devel 四. OpenSSL 安装 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
2.2.安装,启动nginx
1.下载源码包 wget -c https://nginx.org/download/nginx-1.12.0.tar.gz 2.解压缩源码 tar -zxvf nginx-1.12.0.tar.gz 3.配置,编译安装 开启nginx状态监测功能 ./configure --prefix=/opt/nginx1-12/ --with-http_ssl_module --with-http_stub_status_module make && make install 4.启动nginx,进入sbin目录,找到nginx启动命令 cd sbin ./nginx #启动 ./nginx -s stop #关闭 ./nginx -s reload #重新加载
2.3.安装完成后检测服务
netstat -tunlp |grep 80 curl -I 127.0.0.1 #如果访问不了,检查selinux,iptables
3.nginx目录及配置
3.1目录结构
conf 存放nginx所有配置文件的目录,主要nginx.conf,此文件极其重要
html 存放nginx默认站点的目录,如index.html、error.html等
logs 存放nginx默认日志的目录,如error.log access.log
sbin 存放nginx主命令的目录,sbin/nginx
3.2多虚拟主机功能(都是在nginx.conf中配置)
先改变本地hosts文件C:\Windows\System32\drivers\etc\hosts
第一个虚拟主机 www.s24pian.com
server { #定义网站的端口 listen 80; #定义网站匹配的域名 server_name www.s24pian.com; #server_name _; #server_name www.s24python.com; #定义虚拟主机的访问日志功能,记录用户的ip,以及请求信息,和爬虫代理后面的真实ip等功能 #access_log logs/host.access.log main; #access_log "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G" main; # location作用是匹配url,如同 django的 url.py功能一样 # 最低级匹配,当请求时 192.168.16.85:81/ 就进入如下location location / { #这个root关键词 是定义静态文件存放目录的 root /opt/s24pian; #index参数,定义网站首页文件名的 index index.html index.htm; } #alias是别名,当访问0.0.0.0/static/1.jpg时会去/opt/s24crm/static1/1.jpg找,当为root时会拼接上static访问路径为/opt/s24crm/static1/static/1.jpg找 location /static { #给路径添加别名 alias /opt/s24crm/static1/; } } 第二个虚拟主机 www.s24lol.com server { listen 80; server_name www.s24lol.com; location / { root /opt/s24lol; index index.html; } }
3.3nginx的访问日志功能(将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 logs/access.log main; access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
3.4错误页面优化(找到server{}标签的配置,添加error_page 404 /404.html),然后在指定html中添加自己想要的样式
location / { #这个root关键词 是定义静态文件存放目录的 root /opt/s24pian; #index参数,定义网站首页文件名的 index index.html index.htm; } #nginx错误页面的定义 error_page 404 /404.html;
4.nginx配置反向代理
什么是反向代理?
在此,简单了解一下,正向代理就是为客户端代理,举个例子,如果想要访问国外网站,需要通过VPN等一些代理软件。相反,反向代理就是为服务器代理,我们学的nginx服务器就是。
可参考博客:https://www.cnblogs.com/xudong-bupt/p/8661523.html
nginx配置反向代理
server { listen 80; server_name _; location / { #反向代理的参数 proxy_pass http://127.0.0.1:81; } error_page 404 /404.html; }
5.负载均衡
nginx的反向代理和负载均衡通常结合使用
nginx.conf配置文件如下:
#通过upstream关键词,定义服务器地址池 upstream s24server { server 127.0.0.1:81; server 127.0.0.1:82; server 127.0.0.1:83; } #定义第一个虚拟主机 server{} ,功能是 进行反向代理,负载均衡 server { listen 80; server_name _; location / { proxy_pass http://s24server; } } #第二个server,模拟第一台django server { listen 81; server_name _; location / { root /opt/s24django1; index index.html; } } #定义第三个server,模拟第二台django server { listen 82; server_name _; location / { root /opt/s24django2; index index.html; } } #定义第四个server,模拟第三台django,讲道理,这三台django应该提供一样的数据 server { listen 83; server_name _; location / { root /opt/s24django3; index index.html; } }
nginx的负载均衡规则
1.轮训机制 ,每个机器,解析一次 2.权重机制 ,哪台机器的权重高,请求优先发给谁,有权重比例设置 upstream s24server { server 127.0.0.1:81 weight=1; #server 127.0.0.1:82 weight=3; server 127.0.0.1:83 weight=4; } 3.ip_hash ,真对用户的ip地址得到哈希值,永久发给一台机器 ,ip哈希方式,不得和权重一起用 #通过upstream关键词,定义服务器地址池 upstream s24server { server 127.0.0.1:81 ; #server 127.0.0.1:82 ; server 127.0.0.1:83 ; ip_hash; }
6.注意
1 2 | 1.nginx 配置中proxy_pass对应http,uwsgi_pass对应socket 2. 如果想要在不同机器之间以域名方式传送:需要proxy_set_header host $http_host;($host仅仅是ip,默认以ip方式传送) |
7.nginx不同的server配置不同log_format
如果每个不同server的日志想要不同的log_format,在log_format中的参数要保持一致。当一个nginx配置文件中有多个log_format时,如果access_log应用了日志格式名称main1,日志格式就是main1,如果没有应用任何,会应用默认的log_format,而非自定义的默认log_format
#nginx.conf
http { include mime.types; default_type application/octet-stream; log_format main1 '$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 main1; #此处生成的日志格式就是引用了参数为main1的 sendfile on; tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf/conf.d/00_global_backend.conf; include /etc/nginx/conf/conf.d/test.conf; #test.conf server { server_name csdata2.org; access_log /10_journals.log global_main; #此处global_main表示着使用参数为global_main的log_format default_type 'text/html'; charset utf-8; server_name_in_redirect on; client_max_body_size 1024m; location / { #root html; #index index.html; proxy_pass http://backend_a; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } #00_global_backend.conf(此文件先定义了global_main参数,在nginx.conf中要先引入) upstream backend_a { #ip_hash; server xxxx; server xxxx backup; } log_format global_main '$http_host $remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
参考:https://www.cnblogs.com/kevingrace/p/5893499.html
nginx -v 查看nginx版本 nginx -V查看nginx编译安装的模块
nginx实现端口转发
nginx1.9.0之后添加了stream模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 编译nginx的时候要添加stream模块 ./configure –with-stream # 这个模块实现了网络层和传输层的的转发、代理、负载均衡等 stream { # stream与http配置同级 server { listen 13306; proxy_pass 192.168.8.168:3306; # 有了这个server配置,你就可以通过跳板机ip+13306端口访问内网的mysql库了 } server { listen 10000; proxy_pass 192.168.8.168:8080; # 有了这个配置,你就可以直接访问跳板机ip+10000端口,访问你的内网web服务了 } # 还可以设置指定的客户端IP访问(白名单设置) # 自己百度更多功能吧 } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律