Nginx快速入门

Nginx是一款高性能的HTTP 和反向代理服务器,同时也可作为负载均衡器、缓存服务器和邮件代理服务器使用。

1. 正向代理和反向代理

1.1 正向代理

正向代理是客户端侧的代理服务器,它的核心作用是:代替客户端向目标服务器发起请求,隐藏客户端的真实身份,或解决客户端无法直接访问目标服务器的问题。

核心特征

  1. 代理对象是客户端:客户端明确知道自己在使用代理,且需要手动配置代理地址(比如浏览器、手机设置里填代理 IP 和端口)。
  2. 目标服务器 "不知情":目标服务器收到的请求来自代理服务器,无法直接获取客户端的真实 IP(只能看到代理的 IP)。
  3. 解决 "客户端访问限制":比如客户端所在网络屏蔽了某些网站(如境外资源),通过正向代理可绕过限制;或客户端需统一通过代理进行权限验证、流量管控。

典型场景

  • 个人使用 VPN 访问境外网站(VPN 本质是一种正向代理,客户端连接 VPN 服务器后,所有请求通过 VPN 转发)。
  • 企业内网员工通过公司统一的正向代理服务器访问互联网(企业借此管控员工上网权限、记录上网日志)。
  • 开发中通过代理工具(如 Charles、Fiddler)抓包,查看客户端与服务器的通信数据(代理工具扮演正向代理角色)。
1.2 反向代理

反向代理是服务器侧的代理服务器,它的核心作用是:代替后端真实服务器接收客户端的请求,再将请求转发给合适的后端服务器,同时隐藏后端服务器的真实信息。

核心特征

  1. 代理对象是后端服务器:客户端 "不知情"------ 客户端不需要配置任何代理,只需要像访问普通网站一样访问反向代理服务器的地址(反向代理的 IP / 域名就是用户感知的 "网站地址")。
  2. 客户端 "不知情":客户端不知道后端有多少台真实服务器,也不知道自己的请求最终被转发到了哪台服务器,以为自己直接和 "反向代理" 交互。
  3. 解决 "服务器服务限制":比如后端有多台服务器(集群),通过反向代理实现负载均衡;或隐藏后端服务器 IP,防止直接被攻击;或统一处理 SSL 加密、静态资源缓存等共性需求。

典型场景

  • 负载均衡:大型网站(如淘宝、京东)后端有上千台服务器,客户端请求先到反向代理(如 Nginx、Apache),代理再根据服务器负载情况,将请求转发给压力较小的后端服务器,避免单台服务器过载。
  • 隐藏后端服务器:后端服务器不直接暴露公网 IP,只允许反向代理访问,降低被黑客攻击的风险(比如 SQL 注入、DDoS 直接攻击后端的概率)。
  • 统一 SSL 加密:所有客户端的 HTTPS 请求先到反向代理,由反向代理完成 SSL 证书的解密(将 HTTPS 转为 HTTP),再转发给后端服务器 ------ 后端服务器无需单独配置 SSL,减少重复工作。
  • 静态资源缓存:反向代理将后端返回的静态资源(如图片、CSS、JS)缓存起来,后续客户端请求相同资源时,直接从代理返回,无需再转发给后端,提升访问速度。

2. 安装Nginx

2.1 windows安装

https://nginx.org/en/download.html

来到nginx官网点击链接即可下载

解压后双击nginx.exe文件即可运行nginx,运行之后可以访问本机ip的80端口,如果看到以下内容说明运行成功了

2.2 Linux安装

在官网点击红框处的链接即可下载,下载后上传服务器输入命令:

bash 复制代码
tar -zxvf nginx-1.xx.x.tar.gz

进行解压:

解压完成后可以看到多了个文件夹:

执行命令:

bash 复制代码
#配置
./configure

#构建
make

#安装
make install

执行完毕后就安装好了,也可也使用yum命令安装更为方便。

执行 whereis nginx可以看到nginx安装的位置:

启动文件在sbin目录下,执行成功后可以使用curl命令访问80端口 测试是否执行成功:

输出了网页说明成功了

3. Nginx常用命令

bash 复制代码
./nginx #启动

./nginx -s stop #强制停止

./nginx -s quit #安全退出

./nginx -s reload #重新加载配置文件(nginx.conf)

ps aux | grep nginx #查看nginx进程

4. Nginx配置文件

nginx的使用需要操作其配置文件:

配置文件在nginx安装目录中的conf目录下:

图中的nginx.conf就是我们需要操作的配置文件:

bash 复制代码
#user  nobody;

#nginx进程数,建议设置为等于CPU总核心数。
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

# 事件区块开始
events {
    #单个进程最大连接数(最大连接数=连接数*进程数)
    #根据硬件调整,和前面工作进程配合起来用
    worker_connections  1024;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #include:导入外部文件mime.types,将所有types提取为文件,然后导入到nginx配置文件中
    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  logs/access.log  main;


    #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,
    #对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off
    #以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件
    #对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off
    #以平衡磁盘与网络IO处理速度,降低系统uptime。
    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;

    #长连接超时时间,单位是秒
    keepalive_timeout  65;

    #gzip  on;


    # 第一个Server区块开始,表示一个独立的虚拟主机站点
    server {
        # 提供服务的端口,默认80
        listen       80;
        # 提供服务的域名主机名
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #对 "ip:80/" 启用反向代理,第一个location区块开始
        #可以添加多个loaction块用于代理不同路径的请求
        location / {
            root   html; #服务默认启动目录
            index  index.html index.htm; # 默认的首页文件,多个用空格分开
            #root html; 和 index 配置在反向代理场景中,通常作为 "备选方案"
            #当 proxy_pass 指向的后端服务不可用时
            #Nginx 可能会尝试返回本地 html 目录下的静态文件(具体取决于错误处理配置)。
           
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #

        # 错误页面路由
        error_page   500 502 503 504  /50x.html; # 出现对应的http状态码时,使用50x.html回应客户
        location = /50x.html { # location区块开始,访问50x.html
            root   html;# 指定对应的站点目录为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;
    #    }
    #}

}

其中重要部分我都做了注释

5. 配置负载均衡和反向代理

假设我们有两台服务器,上面运行了相同的服务,那么我们就可以使用nginx做负载均衡来转发请求到两台服务器上:

配置之后,需要重新加载配置文件使用上面提到的命令:nginx -s reload 我们访问本地80端口请求就会被转发到 upstream配置的server中

相关推荐
我是日安2 小时前
从零到一打造 Vue3 响应式系统 Day 17 - 性能处理:无限循环
前端·vue.js
user94051035547172 小时前
Uniapp 3D 轮播图 轮播视频 可循环组件
前端
前端付豪2 小时前
12、为什么在 <script> 里写 export 会报错?
前端·javascript
Junsen2 小时前
electron窗口层级与dock窗口列表
前端·electron
一个小潘桃鸭2 小时前
需求:el-upload加上文件上传进度
前端
长不大的程序员2 小时前
Linux系统-debian系的软件包管理
linux·运维·服务器·debian
小虎l2 小时前
李兴华-JavaWEB就业编程实战
java
梦醒繁华尽2 小时前
使用vue-element-plus-x完成AI问答对话,markdown展示Echarts展示
前端·javascript·vue.js