Nginx相关记录

1.下载安装

ubuntu20.4基于系统

//更新包源
sudo apt update


//直接安装
sudo apt install nginx


//启动
sudo systemctl start nginx
sudo systemctl enable nginx

//重启
sudo service nginx restart
sudo systemctl restart nginx

//配置防火墙
sudo ufw allow 80/tcp

443是https


win
启动直接双击nginx.exe文件
win下必须用杀死所有进程命令或去任务管理器里结束nginx进程树
taskkill /IM nginx.exe /F

2.nginx简介

2.1 作为web服务器

nginx可以处理静态或者动态页面

当处理静态页面时,nginx.conf配置如下

server {
    listen 80;
    server_name example.com;

    root /var/www/html;  # 静态文件的根目录

    location / {
        try_files $uri $uri/ /index.html;
    }
}

当处理动态页面时就需要把请求转发到后端服务器

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;  # 将请求转发到后端服务器
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2.2 作为反向代理服务器

作为反向代理服务器,通过配置多个后端服务器实现负载均衡。

upstream backend {
    server 192.168.1.50;
    server 192.168.1.51;
    server 192.168.1.52;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
    }
}

反向代理就是接受客户端的请求然后再由nginx转给后端服务器,多了个中间商

目的就是为了隐藏后端服务器地址,过nginx隐藏真实的端口,增加安全性

比如通过代理来连接mysql

stream {        
        upstream mysql {
            server ******:3306;  #后端数据库的ip和端口,如果进行了域名解析,直接写域名就好
        }
        server {
            listen 3307;   #如果监听3306,远程登录的时候不用加-p参数
            proxy_connect_timeout 10s;
            proxy_timeout 30s;
            proxy_pass mysql;
        }
}

要注意的是因为mysq属于tcp连接,而我们默认的mysql.conf配置文件里是基于http请求的,要基于tcp连接需要建一个stream块,stream和http是平级的

2.3 反向代理缓存

nginx也可以缓存经过它的请求响应

通过配置缓存策略和有效期,可以在接收到请求时直接从缓存中返回响应,就不用向后端服务器请求数据了

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_cache my_cache;
        proxy_cache_valid 200 304 10m;
    }
}

2.4 Web应用防火墙

通过配置HTTP模块和相关的安全策略,Nginx可以充当Web应用防火墙,对来自客户端的请求进行过滤和检查,防范SQL注入、跨站脚本(XSS)等常见的Web攻击。

3.关于nginx配置文件遇到的坑以及补充

3.1alias和root(区别在后面)

1.使用root来获取动态静态资源时,location后面不能有前缀,不然会拼到给定的文件地址后面,导致路径识别不到,

解决办法:

1.直接使用 / 不要加任何名称

2.如果所有的前端项目需要在一个端口下的话,就只能使用这种方案了-----因为root是绝对路径,所有的location /后面的名称都会拼到root 目录后面,所以在 / 后加具体的存在的文件名称也可以完成

3.使用alias 去指定静态动态目录

不要试图去试图使用^~  或者 rewrite方式,经测无数次无效

//错误示范
location /qq {
			root E:/nginx-1.25.5/html/dist/dist2/;  # 使用 root 指令
			index inde.html;  # 指定默认索引文件
		}


//正确
 location /dist2 {
        root E:/nginx-1.25.5/html/dist/;  # 使用 root 指令
        index inde.html;  # 指定默认索引文件
    }

2.如果需要前缀来区分前端项目就使用alias这个来标识路径

使用这个时location后的前缀不会被拼接到目录上的他会在当前文件目录下找指定的index.html页面

//正确
location /qq {
			alias 			E:/nginx-1.25.5/html/dist/dist/;
			try_files $uri $uri/ /index.html;
			index  index.html index.htm;
        }

location /bb {
			alias 			E:/nginx-1.25.5/html/dist/dist1/;
			try_files $uri $uri/ /index.html;
			index  index.html index.htm;
        }

区别:
root 指令用于定义请求的根目录。nginx会将请求的url附加到root指令指定的路径上,以构建文件系统的路径。


alias 指令也用于定义请求的根目录,但它不会将请求的URI附加到指定的路径上。相反,它使用指定的路径替换URI中的位置部分。

使用场景
当你的目录结构和URL结构一致时,使用root。
当你的目录结构和URL结构不一致时,使用alias。

3.2通过nginx反向代理连接服务 配置后端接口

配置后端接口最重要的属性 proxy_pass 指定服务器的地址

location /qq {
			rewrite ^/lc(.*) $1 break;
            proxy_pass http://127.0.0.1:8080; 
           
        }

如果qq不是后端接口路径的话,就可以使用rewrite重写规则,不重写的话就会试/qq拼接到8080后,地址都错了,会导致访问接口失败

通常情况下/后面就是接口的路径前缀

一个典型的nginx代理配置

server {

        listen       81;
        server_name  location;
        location / {
            root /soft/apache-tomcat-7.0.77/jsdwebapps/webapps/test; # 网站根目录 ,存放dist文件里的内容
            index  index.html index.htm;
            try_files $uri $uri/ /index.html; # 防止页面刷新出现404
        }

      location /api{
 
            proxy_set_header Host $http_host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header REMOTE-HOST $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_pass http://localhost:8899;
        }

}

 server {

        listen       82;
        server_name  location;
        location / {
            root /soft/apache-tomcat-7.0.77/jsdwebapps/webapps/ruoyi_vue; # 网站根目录 ,存放dist文件里的内容
            index  index.html index.htm;
            try_files $uri $uri/ /index.html; # 防止页面刷新出现404
        }

      location /prod-api/{
 
            proxy_set_header Host $http_host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header REMOTE-HOST $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_pass http://localhost:8080/;
        }
}

3.3允许不同的前端项目使用不同的端口时就配置多个服务server,去监听不同的端口

server {
    listen 8083;
    server_name 127.0.0.1;


     location /qq/ {
        alias E:/nginx-1.25.5/html/dist/dist1/;  # 使用 root 指令
        index inde.html;  # 指定默认索引文件
    }
server {
    listen 8084;
    server_name 127.0.0.1;


     location /qq/ {
        alias E:/nginx-1.25.5/html/dist/dist2/;  # 使用 root 指令
        index inde.html;  # 指定默认索引文件
    }

2024.7.6

4.nginx搭配minio来实现访问远程服务器上的静态资源

如果需求是这样的:nginx反向代理可以直接代理远程服务器上的后端接口,但是无法直接调用远程服务器上的前端资源,因为服务器本身并不能够直接通过http来访问文件,后端可以直接访问接口是因为有Tomcat,远程服务器上没有nginx,但是前端资源要部署在远程服务器上,通过另一台有nginx的服务器去访问资源,这个时候就需要一个支持http访问文件的工具,因为minio底层是go语言实现的,它使用了go语言的标准库net/http来实现http服务器功能,所以可以通过将文件上传到minio服务上,再去通过nginx去反向代理minio下的文件地址,以达到访问静态资源的目的

server {
    listen 8083;
    server_name 127.0.0.1;


     location /qq {
        proxy_pass http://**:**:**:**:9000/test/dist2/inde.html;
    }
}

关于nginx配置中server_name解释:server_name要写本机的服务地址,不能写远程服务器地址,是通过它来识别本机的

------------------------------------------------------------------

总结,nginx配置文件有些出错了都不会提示,会遇到很多大大小小的坑,需要去看log

win下就在nginx/log/error.log

linux就在/var/log/nginx

要搞清楚地址后加/和不加/的区别访问的文件目录还是具体的文件

location后一定不能重复

常见的错误:

浏览器:404必是地址访问错误

duplicate location:location配置重复

is not found (3: The system cannot find the path specified), client  和  CreateFile() "E:\nginx-1.25.5/html/qb" failed (2: The system cannot find the file specified) :资源路径错误

connect() failed (10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond) while connecting to upstream:后端地址错误导致nginx连接失败

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值