全面解析|搞懂Nginx这一篇就够了
前言
Nginx是一个http服务器,是一个使用c语言开发的高性能的http服务器及反向代理服务器。Nginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试Nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。本文将为大家详细介绍关于Nginx的原理以及在应用场景下的相关解析。
1. Nginx的概念?
「什么是Nginx呢:」
Nginx是一个基于HTTP的反向代理服务器,也是一个基IMAP/POP3/SMTP服务邮件服务器
反向代理服务器:现在我们A需要访问的目标B服务器的10.7.182.100,我要访问这个B服务器上的资源,现在如果使用了Nginx之后,我可以通过Nginx服务器从而达到访问10.7.182.100这个服务器的目的
IMAP/POP/SMTP:这三个是邮件的传输协议
邮件服务器:发送邮件 接收邮件
Web服务器:本身是一个Web服务器的软件,类似于Tomcat这种Web服务的软件
「Nginx能干什么呢:」
可以作为Web服务器
可以作为邮件服务器
可以作为反向代理的服务器
动静分离(就是将动态资源和静态资源分隔开)
可以实现负载均衡
2、Nginx的安装
「Nginx安装步骤:」
第一步:下载我们的nginx 这里以1.6.2版本为例第二步:共享安装文件到我们的linux上面第三步:将文件拷贝到/usr/local下面第四步:安装 tar -zxvf xxxx.tar.gz第五步:下载所需要的依赖库 yum install pcre yum install pcre-devel yum install zlib yum install zlib-devel第六步:进行config的配置
cd nginx-1.6.2 && ./configure --prefix=/usr/local/nginx第七步:安装make && make install 第八步:启动nginx/usr/local/nginx/sbin/nginx关闭: .... -s stop -s reload 查看端口是否有问题netstat -tunpl |grep 80浏览器进行验证没问题就可以
3、Nginx的配置文件的解析
「配置文件:」
#user nobody;
#工作的线程(4核8线程那么下面就设置成8 物理硬件有关)
worker_processes 1;#全局的错误日志存放的地方
#error_log logs/error.log;#全局错误日志存放的地方 后面的notice表示的是输出错误日志的格式
#error_log logs/error.log notice;
#error_log logs/error.log info;#nginx进程号存放的地方
#pid logs/nginx.pid;#最大的连接数(这个也跟硬件是有关系的)
events {worker_connections 1024;
}#下面就是跟HTTP请求有关系的了
http {#表示的是当前服务器支持的类型include mime.types;#默认传输的数据类型是流 default_type application/octet-stream;#声明了一种日志格式 这种日志格式的名字叫做 mainlog_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';#表示的是每一次请求的日志记录 格式就是上面的main格式access_log logs/access.log main;#是否可以发送文件sendfile on;#tcp_nopush on;#这个是双活的超时的时间#keepalive_timeout 0;keepalive_timeout 65;#是否打开文件的压缩#gzip on;#虚拟一个主机#负载均衡的配置upstream qianyu {ip_hash;server 10.7.182.110:8080;server 10.7.182.87:8080;}#server {# listen 90;# server_name localhost; # location / {# root qianyu;# index qianyu.html;# }#做一个反向代理#表示的是 如果你访问的后缀是 .jpg结尾的话那么 就访问下面的另外的服务器# location ~ \.jpg$ {# proxy_pass http://10.7.182.110:8080;# }#下面要演示一个负载均衡的例子#location ~ \.jpg$ {# proxy_pass http://qianyu;#}#}#虚拟一个动静分离的机器server {listen 9999;server_name localhost;#表示的是动态资源访问的机器location / {proxy_pass http://10.7.182.54:8080;}#表示的是非 css和js文件访问的地址location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${root /usr/local/webapp;expires 30d;}#表示的是css和js的访问地址location ~ .*\.(js|css)?${root /usr/local/webapp;expires 1h;}}#虚拟了服务器server {#端口是 80listen 80;#这个表示的是虚拟服务器默认访问的是本机server_name localhost;#这个是虚拟服务器的编码#charset koi8-r;#当前服务器的日志的存储的地方#access_log logs/host.access.log main;#做了一个地址的映射location / {root html;index index.html index.htm;}#如果报404的时候访问的页面#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#报错50开头的是 就访问50x.htmlerror_page 500 502 503 504 /50x.html;#下面对50x.html又做了一个映射 就访问根目录下的html中的 50x.htmllocation = /50x.html {root html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
4、实现Nginx下的反向代理
「做一个反向代理:」
表示的是如果你访问的后缀是 .jpg结尾的话,那么就访问下面的另外的服务器
location ~ \.jpg$ {proxy_pass http://10.7.182.110:8080;}
5、实现Nginx下的负载均衡
「第一种策略:默认是轮循的策略:」
配置upstreamupstream qianyu {server 10.7.182.110:8080;server 10.7.182.87:8080;}配置负载均衡location ~ \.jpg$ {proxy_pass http://qianyu;}
「第二种策略:权重(weight):」
#负载均衡的配置upstream qianyu {server 10.7.182.110:8080 weight=2;server 10.7.182.87:8080 weight=1;}配置负载均衡location ~ \.jpg$ {proxy_pass http://qianyu;}
「第三种策略:IPHash的使用:」
#负载均衡的配置upstream qianyu {ip_hash;server 10.7.182.110:8080;server 10.7.182.87:8080;}
配置负载均衡location ~ \.jpg$ {proxy_pass http://qianyu;}
6、实现Nginx下的动静分离
「动静分离:」
简单的来说就是将动态资源和静态资源给分隔开
静态资源放到Nginx服务器上
动态资源放到Tomcat服务器上
Jpg html css png gif ....静态资源 ---->放到Nginx服务器上
.action结尾的都是动态的资源 ------------------------->放到Tomcat的服务器上
「动静分离的实现:」
在/usr/local目录下创建webapp文件夹
在webapp目录下创建css、html、js、img文件夹
编写HTML的内容并将html文件放到webapp目录下
<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title><link rel="stylesheet" type="text/css" href="/css/main.css"/><script src="/js/main.js" type="text/javascript" charset="utf-8"></script></head><body><img src="/img/bbb.jpg"/><br /><a href="/Dynamic_Resource/qianyu.action">点击我访问动态资源</a></body>
</html>
将图片放到img目录下,将css放到css目录下,将js文件放到js的目录下
编写动态资源的这个工程
package com.qy.servlet;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class qianyuServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");PrintWriter writer=response.getWriter();writer.write("this is dynamic resource test");writer.flush();writer.close(); }
}
编写配置文件 /conf/nginx.xml文件
#虚拟一个动静分离的机器server {listen 9999;server_name localhost;#表示的是动态资源访问的机器location / {proxy_pass http://10.7.182.54:8080;}#表示的是非 css和js文件访问的地址location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${root /usr/local/webapp;expires 30d;}#表示的是css和js的访问地址location ~ .*\.(js|css)?${root /usr/local/webapp;expires 1h;}}
测试
7、虚拟主机
「虚拟主机配置:」
server {listen 90;server_name localhost;location / {root qianyu;index qianyu.html;}#做一个反向代理#表示的是 如果你访问的后缀是 .jpg结尾的话那么 就访问下面的另外的服务器location ~ \.jpg$ {proxy_pass http://10.7.182.110:8080;}
}
结语
本篇关于Nginx的介绍就先到这里结束了,后续会出更多关于Nginx系列更多文章,谢谢大家支持!
点个赞,证明你还爱我
全面解析|搞懂Nginx这一篇就够了相关推荐
- 就是要让你搞懂 Nginx,这篇就够了!
来自:CSDN,作者:渐暖° 链接:https://blog.csdn.net/yujing1314/article/details/107000737 " Nginx 是一个高性能的 HT ...
- nginx location 正则表达式匹配多个地址_就是要让你搞懂Nginx,这篇就够了!
Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好. Nginx 专为性能优化而开发,性能是其最重要 ...
- 就是要让你搞懂Nginx,这篇就够了!
关注 前端瓶子君,回复"交流" 加入我们一起学习,天天进步 来自:CSDN,作者:渐暖° 链接:https://blog.csdn.net/yujing1314/article/d ...
- C++两个函数可以相互递归吗_[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进
[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...
- [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进
[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...
- 搞懂nginx的proxy模块-01
搞懂nginx的proxy模块-01 nginx的ngx_http_proxy_module模块的指令着实是太多了,其实平时工作中经常用到的指令也就是那几个,但是如果不细看下文档的话,下次对一些配置的 ...
- 万字多图,搞懂 Nginx 高性能网络工作原理!
在单进程的网络编程模型中.所有的网络相关的动作都是在一个进程里完成的,如监听 socket 的创建, bind.listen.再比如 epoll 的创建.要监听事件的添加,以及 epoll_wait ...
- 8分钟带你深入浅出搞懂Nginx
8分钟带你深入浅出搞懂Nginx Nginx是一款轻量级的Web服务器.反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用. 架构图 上图基本上说明了当下流行的技术架构 ...
- 架构师必须搞懂DNS,一篇文章就够了。
转载自 架构师必须搞懂DNS,一篇文章就够了. 概念 DNS,全称Domain Name System,即域名系统,搞清楚,它不是DNF地下城与勇士. DNS是怎么来的,我们知道要访问一个服务器的资源 ...
最新文章
- GO 语言圣经 -在线阅读
- Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签、用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)
- Odoo中最小库存规则和按订单生成规则的区别
- springboot获取sessionid_Spring Boot 整合Redis, 用起来真简单!
- 每天一道LeetCode-----将数组/链表后k个元素移动到前面
- 下单问题分析及解决方式
- 失眠症的治疗办法有哪几种
- 尝试cython和openmp
- Lines(HDU-5124)
- Go 语言 bytes.Buffer 源码详解之1
- STM32液晶显示HT1621驱动原理及程序代码
- 使用 Lagrange Multiplier解决带有一个条件限制的最优解问题
- Python3 递归算法
- 苹果在中国的审核规律探索二
- 联想Yoga C930 NM-B741 EYG70 Ariel-SVT笔记本点位图TVW
- 【JAVA问题解决方案】01.EasyExcel导出数据超过Excel单表上限解决方案
- Android做加入购物车,Android实现购物车添加商品动画
- 第四批入围企业公示——年度TOP100智能网联供应商评选
- 《第三节》解读Logback的配置文件
- html5怎么修改图片大小,HTML5 javascript修改canvas的大小
热门文章
- 软件测试的工作内容?以及软件测试是干什么的?学习规划和职业规划
- JAVA计算机毕业设计仓库进销存管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
- 显示或隐藏MacOS中的隐藏文件
- Android开发实例——倒计时器——Android多线程编程
- Bancor协议源码分析
- java多线程下LongAdder、CountDownLatch、CyclicBarrier、Phaser 的用法
- 第九届中国数据库技术大会(DTCC2018),我来了,你在哪儿?
- 海外社交媒体营销之Facebook如何进行推广?
- 一文掌握需求评审常见难题及改进策略【一杯咖啡谈项目】
- 移动机器人平台-Mobile Sim /ARIA