40

nginx用法总结,映射静态资源,代理http,负载均衡,tcp服务

 5 years ago
source link: https://www.tuicool.com/articles/RZJnAjn
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

用nginx也有好多年了,还没有总结过,这篇博客总结一下

安装

我测试环境是在mac,平时用的服务器有ubuntu和centos

# mac
brew install nginx

# ubuntu
apt install nginx

# centos
yum install nginx

启动,重启服务

# mac
brew services start/restart/reload nginx

# ubuntu
service nginx start/restart/reload

# centos
systemctl start/restart/reload nginx.service

映射静态文件

nginx启动就会接管服务器上的80端口,所以如果服务器上有80端口的服务,会启动失败,解决办法就是停了它们或者卸载它们,比如另一个服务器 apache,它也是占用80端口的

一般正常情况都是使用不同的域名解析到一个服务器上,然后通过nginx来实现不同服务之间的转发

我这里以修改hosts来实现域名的解析

127.0.0.1 demo.com

在电脑上创建一个文件夹,里面放上一张图片,然后配置nginx,配置文件在

# mac
/usr/local/etc/nginx

# ubuntu/centos
/etc/nginx

一般nginx都会有个默认的配置文件 nginx.conf 在里面可以找到这样一段 include servers/*; 或者 linux系统上就是 include conf.d/*;

这样我就可以把nginx的配置文件写在它包含进去的文件夹里了,mac上装好nginx后,在 /usr/local/etc/nginx 里没有 servers 目录,可以自己创建一个,nginx的配置文件一般都是以 .conf 结尾

servers 里新建一个文件 demo.conf 名字随便取,添加上下面配置

server {
    listen 80;
    server_name demo.com;
    location / {
        root /Users/hh/Desktop/static;
    }
}

其中 /Users/hh/Desktop/static 就是我放图片的静态文件目录,重新加载nginx

brew services reload nginx

浏览器访问 http://demo.com/0.png 即可打开图片

既然nginx可以映射静态资源文件,那前端框架写的项目打包后可不可以用它映射成服务呢?

是可以的,但如果有框架里用到了前端路由,就会有问题(没记错的话要么是404,要么是返回报错),这时候稍微加一些配置就可以解决了

server {
    listen 80;
    server_name demo.com;
    location / {
        root /Users/hh/Desktop/react-demo/build;
        index index.html;
        autoindex on;
        set $fallback_file /index.html;
        if ($http_accept !~ text/html) {
            set $fallback_file /null;
        }
        if ($uri ~ /$) {
            set $fallback_file $uri;
        }
        try_files $uri $fallback_file;
    }
}

重启nginx服务,再次访问就没有什么问题了

代理网站(http代理)

使用nodejs中的 serve 模块启动一个http服务

serve -l 3000 /Users/hh/Desktop/nginx-demo/demo

文链接原: https://tomoya92.github.io/2019/10/12/nginx-tutorial/

/Users/hh/Desktop/nginx-demo/demo 目录下我创建了一个 index.html 文件,内容

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document demo</title>
  </head>
  <body>
    hello world! demo.com
  </body>
</html>

配置nginx,可以在上一个 demo.conf 文件里继续配置,也可以自己再新建一个配置文件,这里还用的是 demo.com 这个域名,先把映射静态文件的配置注释掉

server {
    listen 80;
    server_name demo.com;
    location / {
        proxy_pass http://localhost:3000;
    }
}

重新加载nginx,然后浏览器访问: http://demo.com 即可看见 index.html 的内容

nginx负载均衡

使用场景:

  1. 一台服务器性能不够,要增加服务器
  2. 不停服部署

说白了就是一个请求交由nginx根据负载均衡的配置来分发到不同的服务器上进行业务处理,举个例子

我这启动了两个服务,端口分别是 3000, 3001

两个页面分别是

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document demo</title>
  </head>
  <body>
    hello world! demo.com
  </body>
</html>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document demo</title>
  </head>
  <body>
    hello world! demo1.com
  </body>
</html>

将之间的配置注释掉,修改nginx的配置

upstream demo_server {
    server 127.0.0.1:3000 weight=3;
    server 127.0.0.1:3001 weight=7;
}
server {
    listen 80;
    server_name demo.com;
    location / {
        proxy_pass http://demo_server;
    }
}

我这里把 3000 端口的服务权重定为3,3001的权重定为 7,然后重启nginx,访问 http://demo.com 一直刷新页面,大概10次里会有3次出现3000端口的页面,7次是3001服务的页面内容

tcp代理

tcp代理配置文件的位置稍微不同,找到 nginx.conf 文件,找到 include servers/*; 然后看它外面还有一层 http {} 说明nginx默认是代理http的服务,要想代理tcp的服务就要将配置写在与 http{} 同级的地方,我就直接写在 nginx.conf 里了,然后将本机上装的mysql服务映射成 demo.com 域名访问

配置如下

stream {
    server {
        listen 80;
        proxy_pass 127.0.0.1:3306;
    }
}

重新加载nginx

通过mysql客户端工具,可以直接使用域名连接mysql了

umQnaeQ.png!web

tcp也能代理,这就好玩了,各种联机游戏都可以通过nginx来转发了,简直爽歪歪

原文链接:


Recommend

  • 79

    欢迎关注:glmapper_2018 引言 先来看下nginx在web服务器排名上的趋势: 存在即合理,那为什么要使用nginx呢?这得看看nginx能帮我们做些什么。 首先,nginx能做反向代理【关于反向代理和正向代理此处不做说明了,感兴趣的小伙伴自行谷

  • 67

    通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常用配置的说明。即学即用,你还在等什么?一睹为快先了解Nginx的三大功能Nginx可以作为一台http服务器。可以做网站...

  • 37

      学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等。用一句别人开玩笑的话来说...

  • 35
    • www.tuicool.com 5 years ago
    • Cache

    Nginx反向代理与负载均衡

    学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等。用一句别人开玩笑的话来说,Java十年前的技术现在还能用,而前端的技术就不是这样的了。 突然想起了deno项目发...

  • 6

    java高级用法之:在JNA中使用类型映射 原创 程序那些事 2022-03-23 20:14:01...

  • 7

    JNA提供JAVA类型和native类型的映射关系,但是这一种映射关系只是一个大概的映射,我们在实际的应用中还有很多需要注意的事项,本文将会为大家详细讲解在使用类型映射中可能会出现的问题。一起来看看吧。 String 首先是String的映射,JAVA中的S...

  • 5

    JNA 中有很多种映射,library 的映射,函数的映射还有函数参数和返回值的映射,libary 和函数的映射比较简单,我们在之前的文章中已经讲解过了,对于类型映射来说,因为 JAVA 中的类型种类比较多,所以这里我们将 JNA 的类型映射提取出来单独讲解。类型...

  • 6

    JNA 提供 JAVA 类型和 native 类型的映射关系,但是这一种映射关系只是一个大概的映射,我们在实际的应用中还有很多需要注意的事项,本文将会为大家详细讲解在使用类型映射中可能会出现的问题。一起来看看吧。String首先是 String 的映射,JAVA...

  • 4

    《Mybatis 手撸专栏》第 2 章:创建简单的映射器代理工厂 作者:小傅哥作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人...

  • 7

    JNA提供JAVA类型和native类型的映射关系,但是这一种映射关系只是一个大概的映射,我们在实际的应用中还有很多需要注意的事项,本文将会为大家详细讲解在使用类型映射中可能会出现的问题。一起来看看吧。 String 首先是String的映射,JAVA中的S...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK