nginx入门

2023-09-21 21:17:54


nginx

1.安装

Centos7安装nginx

配置源
# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx -release-centos-7-0.el7.ngx.noarch.rpm
安装
# yum install -y nginx
启动
# systemctl start nginx

注意:

注意:在centos 7中,用systemctl启动nginx可能出现如下错误,

nginx: [emerg] bind() to 0.0.0.0:8000 failed (13: Permission denied)

这是由于selinux的安全策略引起的。解决方法如下:

  • setenforce 0 (临时)
  • 修改/etc/selinux/config,设置SELINUX=disabled (永久有效,需重启)

2.nginx常用命令及配置文件

nginx 

#立即停止
nginx -s stop

#执行完当前请求再停止
nginx -s quit

#重新加载配置文件,相当于restart
nginx -s reload

#将日志写入一个新的文件
nginx -s reopen

#测试配置文件
nginx -t

日志文件位置/var/log/nginx/

配置文件位于 /etc/nginx/nginx.conf , 下列命令会引用/etc/nginx/conf.d目录下所有的.conf文件,这可以编写多个配置文件,方便区分。

include /etc/nginx/conf.d/*.conf;

默认配置/etc/nginx/conf.d/default.conf

server {
    listen       80; #监听端口
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html; #根目录
        index  index.html index.htm; #首页
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

3.配置静态网页

/etc/nginx/conf.d目录下编写配置文件,配置静态页面

server {
    listen 8080;
    server_name demo;
    
    location / {
        root /html/static;
        index login.html reg.html;
    }
}

虚拟主机server通过listen和server_name进行区分,如果有多个server配置,listen + server_name 不能重复。

通过访问主机IP+8080端口就能访问到静态资源。

listen

监听可以配置成IP端口IP+端口

listen 127.0.0.1:8000; 
listen 127.0.0.1;( 端口不写,默认80 ) 
listen 8000; 
listen *:8000; 
listen localhost:8000;
server_name

server_name主要用于区分,可以随便起。

也可以使用变量$hostname配置成主机名。

或者配置成域名:example.org www.example.org *.example.org

如果多个server的端口重复,那么根据域名或者主机名去匹配 server_name 进行选择。

下面的例子中:

curl http://localhost:80`会访问`/usr/share/nginx/html
curl http://nginx-dev:80`会访问`/home/AdminLTE-3.2.0
# curl http://localhost:80 会访问这个
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

 # curl http://nginx-dev:80 会访问这个
server{
    listen 80;
    server_name nginx-dev;#主机名
    
    location / {
        root /home/AdminLTE-3.2.0;
        index index.html index2.html index3.html;
    }
  
}
location

/请求指向 root 目录

location 总是从/目录开始匹配,如果有子目录,例如/css,他会指向/static/css

location /css {
  root /static;
}

4. HTTP 反向代理

正向代理

正向代理就是在服务器的角度隐藏客户端,比如说常见的VPN就是正向代理。VNP就是一个代理服务器,他代理的就是客户端。

在这里插入图片描述

反向代理

同理反向代理和正向代理相反,是站在客户端的角度把服务器给隐藏起来,比如说我们通过www.baidu.com的域名来访问百度,而其背后是是有很多服务器的,当我们一般只能通过这个域名来进行访问,然后我们的请求会被代理服务转发到后面的服务器上,也就是后面进行服务的真实服务器的IP以及端口信息都被隐藏了

在这里插入图片描述

配置反向代理

当客户端访问服务器的8080端口就会将请求转发到http://localhost:6060/login.html

server {
    listen 8080;
    server_name oj_java;

    location / {
        proxy_pass http://localhost:6060/login.html;
    }
}

在这里插入图片描述

proxy_pass配置说明

server {
    listen 8080;
    server_name oj_java;

    location / {
        proxy_pass http://localhost:6060/;
    }
}

8080端口的请求转发到6060端口

设置代理请求headers

‎用户可以重新定义或追加header信息传递给后端‎服务器。可以包含文本、变量及其组合。默认情况下,仅重定义两个字段:‎

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

由于使用反向代理之后,后端服务无法获取用户的真实IP,所以,一般反向代理都会设置以下header信息。

location /some/path/ {
    #nginx的主机地址
    proxy_set_header Host $http_host;
    #用户端真实的IP,即客户端IP
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://localhost:8088;
}

常用变量的值:

$host:nginx主机IP,例如192.168.56.105

$http_host:nginx主机IP和端口,192.168.56.105:8001

$proxy_host:localhost:8088,proxy_pass里配置的主机名和端口

$remote_addr:用户的真实IP,即客户端IP。

5.负载均衡

负载均衡将前端请求分发到多个服务器上,有以下好处。

  1. 提高系统性能:通过将请求分发到多个服务器上,负载均衡可以减轻单个服务器的负载,从而提高系统的响应速度和吞吐量。

  2. 提高系统可靠性:如果某个服务器发生故障或不可用,负载均衡器可以自动将请求转发到其他可用的服务器上,从而确保系统的连续性和可用性。

  3. 实现可扩展性:通过添加更多的服务器,负载均衡可以实现系统的水平扩展,从而应对不断增长的流量和用户需求。

在这里插入图片描述

配置负载均衡,一下配置了一个轮询的负载均衡,当访问8080端口时,请求会被轮询转发到6060端口和7070端口的服务。

upstream java_oj {
    #不写,采用轮循机制
    server localhost:6060;
    server localhost:7777;
  
}

server {
    listen 8080;
    server_name oj_java;
    #nginx的主机地址
    proxy_set_header Host $http_host;
    #用户端真实的IP,即客户端IP
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    location / {
        proxy_pass http://java_oj;
    }
}

负载均衡策略

这里只是简单学习几个简单的策略

1.轮循机制(round-robin)

默认机制,以轮循机制方式分发。

2.最小连接(least-connected)

将下一个请求分配给活动连接数最少的服务器(较为空闲的服务器)。

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}
3.ip-hash

客户端的 IP 地址将用作哈希键,来自同一个ip的请求会被转发到相同的服务器。此方法可确保来自同一客户端的请求将始终定向到同一服务器,除非此服务器不可用。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}
更多推荐

JDK21你可以不用,新特性还是要了解的

大家好,我是风筝今年6月份的时候,写过一篇JDK21引入协程,再也不用为并发而头疼了,那时候只是预览版,终于,前两天(2023年9月19日)发布了JDK21正式版。老早就在YouTube上订阅了JDK21发布会的直播,一场预计历时8个小时的直播。SpringBoot3.x版本最低支持的JDK版本为JDK17,也就是说如

SpringBoot实战(二十四)集成 LoadBalancer

目录一、简介1.定义2.取代Ribbon3.主要特点与功能4.LoadBalancer和OpenFeign的关系二、使用场景一:Eureka+LoadBalancer服务A:loadbalancer-consumer消费者1.Maven依赖2.application.yml配置3.RestTemplateConfig.

设计模式:责任链模式

目录组件代码示例源码中使用优缺点总结责任链模式(ChainofResponsibilityPattern)是一种行为型设计模式,它允许多个对象按照顺序处理请求,直到其中一个对象能够处理该请求为止。责任链模式将请求发送者和接收者解耦,使得多个对象都有机会处理请求,同时避免了请求发送者与接收者之间的直接耦合关系。在责任链模

influxdb2.7基本介绍安装与启动

概念timestamp:influxdb所有的数据都会有一个列_time来存timestamp。默认是以nanosecond格式存储的。field:field就是mysql中的字段,fieldkey存储在_field字段中,fieldvalue就是字段值,存储在_value字段中。fieldkey和fieldvalue

如何在微软Edge浏览器上一键观看高清视频?

编者按:视频是当下最流行的媒体形式之一。但由于视频压缩、网络不稳定等原因,我们常常可以看到互联网上的很多视频其画面质量并不理想,尤其是在浏览器端,这极大地影响了观看体验。不过,近期微软Edge浏览器推出了一项新功能,一键就可以让浏览器中的视频变为高清版。这项神奇功能背后的技术秘诀是什么?今天,让我们一起来了解一下微软E

selenium学习

selenium模块和爬虫之间的关联便捷的获取网站中动态加载的数据便捷实现模拟登录什么是selenium模块基于浏览器自动化的一个模块selenium使用流程:-环境安装:pipinstallselenium-下载一个浏览器的驱动程序(谷歌浏览器)-下载路径:http://chromedriver.storage.go

C++版本的OpenCV实现二维图像的卷积定理(通过傅里叶变换实现二维图像的卷积过程,附代码!!)

C++版本的OpenCV库实现二维图像的卷积定理过程详解前言一、卷积定理简单介绍二、不同卷积过程对应的傅里叶变换过程1、“Same”卷积2、“Full”卷积3、“Valid”卷积三、基于OpenCV库实现的二维图像卷积定理四、基于FFTW库实现的二维图像卷积定理五、总结与讨论前言工作中用到许多卷积过程,需要转成C++代

SpringBoot的配置环境属性

SpringBoot的配置环境属性在本文中,我们将讨论SpringBoot的配置环境属性。我们将了解如何使用这些属性来配置我们的应用程序,以便在不同的环境中运行。我们还将了解如何使用SpringBoot的配置文件来管理这些属性。最后,我们将介绍一些最佳实践,以帮助您更有效地使用这些属性。理解SpringBoot的配置环

《C和指针》笔记28:可变参数和stdarg宏

可变参数列表可以通过宏来实现,这些宏定义于stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏——va_start、va_arg和va_end。我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值。下面的程序使用这三个宏计算指定数量的值的平均值。注意参数列表

linux和windows选哪个?

linux和windows选哪个?每年在大学中都会有这么一批学生:沉浸在安装Linux系统,安装双系统,使用Linux系统看看电影,搞一搞炫酷的桌面效果。最后收获了啥?怕是啥也没有,命令学会了几个?能不能写shell?这些才有点价值。最近很多小伙伴找我,说想要一些linux学习资料,然后我根据自己从业十年经验,熬夜搞了

【第四阶段】kotlin语言的Map集合学习

1.Map集合的创建packageKotlin.Stage4funmain(){valmap=mapOf("java"to1,"kotlin"to2)//java代表键1代表值valmap2=mapOf(Pair("java",1),Pair("kotlin",2))//和上面写法等价}2.读取map的值方式1:使用[

热文推荐