nginx简介
1.nginx是一个高性能的Web服务器和反向代理服务器,也可作为电子邮件代理服务器。
2.在连接高并发的情况下,nginx是Apache服务不错的替代品,能够支持高达 50,000 个并发连接数的响应。
正向代理与反向代理
1.反向代理是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回到Internet上请求连接的客户端,此时代理服务器对外表现为一个反向代理服务器。
2.正向代理是指用户无法访问某网站,但是可以访问某代理服务器,而代理服务器可以访问该网站。于是用户通过访问代理服务器去访问该网站,代理服务器把响应信息返回给用户。
3.反向代理中用户访问的IP和端口是nginx服务器的,不知道提供服务的底层服务器,底层服务器在内网中,对外公开的是nginx服务器,nginx充当中间层。而正向代理中用户是知道目标服务器的域名信息的,知只是迫于网络的限制无法访问,如最常见的访问外网。
nginx安装与启动
nginx有windows版本和linux版本,一般针对项目需求是在Linux部署nginx服务器。
下载地址
windows版本下载一个压缩包,解压即可
1.文件路径必须为英文,否则启动不成功。
2.查看端口占用,nginx服务器默认启动80端口。 cmd中
- netstat -an 显示出电脑中所有被打开的端口列表
- netstat -ano 显示出所有占用端口的列表
- netstat -ano | findstr “80” 显示出80端口占用的详细情况
- tasklist | findstr “80” 查询端口具体哪个应用占用
Netstat是在内核中访问网络连接状态及其相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
启动成功
- 启动方式1:双击nginx.exe
- 启动方式2:start nginx
- 关闭方式1: 结束进程(两个进程)
- 关闭方式2:nginx -s stop
nginx配置文件
nginx的核心配置文件nginx.conf主要由3个部分组成
- 基本配置
#user nobody; #配置worker进程运行用户
worker_processes 1; #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
#error_log logs/error.log; #配置全局错误日志及类型 [debug|info|notice|warn|error|crit(致命错误)]默认error
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #配置进程pid文件
- events配置
#配置工作模式和连接数
events {
# use epoll; #事件处理模型优化
worker_connections 1024; #配置每个worker进程连接数上限,nginx支持的总连接数等于worker_connections*worker_processes
# 我的本双核四线程,多任务运行弱,CPU主频2.4GHz,运行缓慢
}
- http配置,基本配置和多个server配置
http {
include mime.types;
default_type application/octet-stream;
#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日志及存放路径,并使用上面定义的main日志格式
#access_log logs/access.log main;
sendfile on; #开启高效文件传输模式
#tcp_nopush on; #防止网络阻塞
#keepalive_timeout 0;
keepalive_timeout 65; #长连接超时时间,单位是秒
#gzip on; #开启gzip压缩输出
#可以配置多个server
server {
listen 80; #配置监听端口
server_name localhost; #配置服务名
#charset koi8-r; #配置字符集(俄罗斯字符集)
#access_log logs/host.access.log main;
#默认的匹配斜杠/的请求,当访问路径中有/,会被该localtion匹配到并进行处理
#nginx根目录 /html/index.html
location / {
root html; #root根目录,nginx安装主目录下的html目录
index index.html index.htm; #配置首页文件的名称
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #配置50x错误页面 html/50x.html
#精确匹配
location = /50x.html {
root html;
}
#PHP脚本请求全部转发道到Apache处理
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
#PHP脚本请求全部转发道到FastCGI处理
# 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;
#}
# 禁止访问.htaccess文件-通常是禁止外网访问的文件
# 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服务,安全的网络传输协议,加密传输,端口443
# 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;
# }
#}
}
nginx的主要应用
1.静态网站
nginx是一个http的web服务器,可以将服务器上的静态文件(html、图片等)通过http协议返回给浏览器客户端;若不配置location,nginx默认查找根目录html中的index.html文件。
server {
listen 8080;
server_name localhost;
location / {
root wangyi/static; #root= ip+端口
index index.html index.htm;
}
#访问:localhost:8080,或如下配置
location /static {
root wangyi; #注意分号
index index.html index.htm;
}
#访问:localhost:8080或localhost:8080/static
.......
}
2.负载均衡
网站服务器由多台服务器组成一个集群对外提供服务,当用户输入域名进行访问的时候,负载均衡负责将用户请求分发到集群中的不同服务器,从而提高并发处理能力。nginx作为访问的统一入口,分发请求,实现负载均衡。 负载均衡实现方式有硬件负载均衡和软件负载均衡。
nginx负载均衡
nginx通过在nginx.conf配置文件中配置实现负载均衡 1.首先在http模块配置
upstream network1{
server 127.0.0.1:3000 weight=3; #权重
server 127.0.0.1:5000 weight=1;
}
weight表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大,被访问的几率越大。 upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,他还能对后端服务器的健康状态进行检查,若后端服务器中有一台发生故障,则前端请求不会转发到该故障机器。 2.然后在server模块里配置
localtion /webname{
proxy_pass http://network1;
}
参数‘http://’是固定的,network1字符串要和upstream后面的字符串相等。代理转发到network1下,然后去匹配upstream,再去匹配upstream下的server。
node.js创建http服务器实现负载均衡
node http服务创建好以后,nginx 配置好以后,node作为代理服务器就可以访问node服务了。
upstream network1 {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:5000 weight=1;
server 127.0.0.1:6000 weight=1;
}
server {
listen 8080;
server_name localhost;
location / {
# 访问不到服务器,做详细配置。
#proxy_redirect off;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
#proxy_set_header Host $http_host;
#proxy_set_header X-NginX-Proxy true;
#proxy_set_header Connection "";
#proxy_http_version 1.1;
proxy_pass http://network1;
}
const http = require('http')
const fs = require('fs')
const url = require('url')
http
.createServer((req, res) => {
if(req.url == '/favicon.ico'){
res.writeHead(200);
res.end()
return;
}
res.writeHead(200);
fs.createReadStream(__dirname + '/index.html') #不同的页面内容查看效果
.pipe(res);
})
.listen(5000) #3000、6000。。。
------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>node</title>
<link rel="stylesheet" href="">
</head>
<body>
<div>第 1 个node服务器</div>
<!-- <div>第 2 个node服务器</div> -->
<!-- <div>第 3 个node服务器</div> -->
</body>
</html>
nginx可以成功访问服务器,访问比大约等于权重之比。
nginx常用负载均衡策略
- 1.轮询(默认)
每个请求轮流分配到不同的后端服务器,如果后端服务器宕机,则自动剔除。具体轮询策略为第一次访问第一个,第二次访问第二个。。。。。
upstream network1 {
server 127.0.0.1:3000;
server 127.0.0.1:5000;
server 127.0.0.1:6000;
}
- 2.权重
每个请求按照一定比例分发到不同的后端服务器,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大,被访问的几率越大。
upstream network1 {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:5000 weight=1;
server 127.0.0.1:6000 weight=1;
}
- 3.ip_hash
ip_hash也叫ip绑定,每个请求按照访问ip的哈希值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话session丢失的问题,常见账号密码登录。 哈希函数hash(“192.168.0.164”)%2 = 0 / 1,ip不变的话访问的服务器不变。
upstream network1 {
ip_hash;
server 127.0.0.1:3000;
server 127.0.0.1:5000;
server 127.0.0.1:6000;
}
当使用ip_hash以后,会一直访问3000端口的第一台服务器。
- 最少连接 web请求会被转发到连接数最少的服务器上。
upstream network1 {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:5000;
server 127.0.0.1:6000;
}
负载均衡其他配置
upstream network1 {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:5000 backup; #备份 当所有非backup机器宕机的时候才能请求backup机器。
}
upstream network1 {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:5000 down;#当前机器是down状态,不参与负载均衡。
}
3.静态代理
把所有静态资源的访问改为访问nginx,而不是后台服务器,nginx更擅长于静态资源的处理,性能更好,效率更高。在实际应用中将静态资源html,css,js,图片交给nginx处理。 nginx实现静态代理,在nginx.conf配置文件中添加静态资源的location。
1.基于请求资源的后缀
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
 root/html; #访问静态资源的路径,静态资源部署在nginx安装目录下,跟访问html/index.html一个道理。
}
2.基于请求资源的存放目录
location ~ .*/(js|css|img|imgags)${
 root/opt/static
}
linux安装目录:/user/local/nginx,在linux作为nginx部署服务器时,请求linux中存放静态资源的某个目录,如/opt/static
4.动静分离
nginx的负载均衡和静态代理结合在一起,实现动静分离,服务器专注于动态资源,nginx专注于静态资源。
5.虚拟主机
虚拟主机就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站。 Nginx下,一个server标签就是一个虚拟主机,设置多个虚拟主机,配置多个server即可。
基于端口的虚拟主机
根据nginx的不同端口即可访问到基于不同端口的服务器。
server {
listen 8080; #9090。。。
server_name localhost;
location / {
proxy_pass http://network1;
}
}
upstream network1 {
server 127.0.0.1:3000;
}
upstream network2 {
server 127.0.0.1:5000;
}
基于域名的虚拟主机
基于域名的虚拟主机访问时以域名的形式访问,这就涉及到DNS域名解析的知识,我们可以在windows的hosts文件给域名直接指定端口,windows C:\Windows\System32\drivers\etc有个hosts文件,如果在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。
server {
listen 8080;
server_name www.maanshan.com
# server_name www.laioyang.com
location / {
proxy_pass http://network1;
#proxy_pass http://network2;
}
}
upstream network1 {
server 127.0.0.1:3000;
}
upstream network2 {
server 127.0.0.1:5000;
}
虚拟主机实例
www.meituan.com
- www.liaoyang.meituan.com
- www.maanshan.meituan.com
今天的文章前端Nginx详解分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/18894.html