Linux编译安装配置 Nginx

Linux安装配置 Nginx

一、下载Nginx安装包

nginx官网:

nginx: download

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

找到我们所需要版本,把鼠标移动到上面,右键打开链接进行下载

image-20250317135936803

下载nginx安装

#下载nginx安装包
wget -c http://nginx.org/download/nginx-1.24.0.tar.gz

二、安装Nginx

2.1、安装Nginx相关依赖

下载所需依赖安装包

#安装nginx所需要的依赖包
yum install -y gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel

2.2、安装Nginx

找到Nginx的安装包进行解压

#解压安装包
tar -zxvf nginx-1.24.0.tar.gz

#进入nginx目录
cd /usr/local/nginx-1.24.0

执行配置脚本,--prefix是指定安装目录

#执行配置脚本 --prefix是指定安装目录
./configure --prefix=/usr/local/nginx

  • 如果遇到报错“./configure: error: C compiler cc is not found”

  • 解决:

    yum -y install gcc gcc-c++ autoconf automake make

  • ubuntu

  • sudo apt-get -y install gcc gcc-c++ autoconf automake make

编译安装

#对nginx编译和安装
make & make install

ubuntu命令

sudo apt-get make & make install

如果ubuntu没有make命令sudo apt-get install make 进行安装

2.3、启动Nginx

进入到nginx安装目录下:

image-20250317140608177

启动命令:

#启动脚本是在
/usr/local/nginx/sbin/nginx
#启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#停止
/usr/local/nginx/sbin/nginx -s stop
#重载
/usr/local/nginx/sbin/nginx -s reload
#杀掉nginx
/usr/local/nginx/sbin/nginx -s quit 

启动失败检测文件是否存在(如logs)

查询nginx是否启动:

ps -ef | grep nginx

访问nginx页面:

在浏览器中输入 ip + 端口号访问(端口默认80)

这样就算安装成功了

如果浏览器访问不通,请检查是否开启防火墙限制,将防火墙关闭或将端口加入到防火墙白名单中,这里nginx的默认端口为80

#查看已放行的端口
firewall-cmd --list-all
#将80端口加入到防火墙放行白名单中,并重载防火墙
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload

关闭防火墙

systemctl stop firewalld

设置nginx 的开机启动

vim /etc/rc.local
文本底部追加
/usr/local/nginx/sbin/nginx

image-20250317141049030

# NGINX 环境变量
export NGINX_HOME=/usr/local/nginx
export PATH=${NGINX_HOME}/bin:$PATH:$PATH:${NGINX_HOME}/sbin

#刷新环境变量

source /etc/profile

测试环境变量是否成功

nginx -t

2.4、基本命令

nginx -t #检查配置文件是否有语法错误
nginx -s reload #热加载,重新加载配置文件
nginx -s stop #快速关闭
nginx -s quit #等待工作进程处理完成后关闭

三、配置文件解析

Nginx 安装目录下, 我们复制一份nginx.conf`成```nginx.conf.default作为配置文件备份,然后修改nginx.conf

3.1、默认配置

Nginx配置文件解析

如前面文件所示,Nginx的主配置文件为etc/nginx/nginx.conf,可以使用 cat命令命令进行查看cat -n nginx.conf

-n 参数在查看时,会显示行号

当然也可以直接使用vim命令进行编辑,vi nginx.conf,输入i即可进行编辑

  • 配置文件目录
main        # 全局配置,对全局生效
├── events  # 配置影响 Nginx 服务器或与用户的网络连接
├── http    # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
│   ├── upstream # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
│   ├── server   # 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
│   ├── server
│   │   ├── location  # server 块可以包含多个 location 块,location 指令用于匹配 uri
│   │   ├── location
│   │   └── ...
│   └── ...
└── ...
1234567891011

一个 Nginx 配置文件的结构就像 nginx.conf 显示的那样,配置文件的语法规则:

配置文件由指令与指令块构成;
每条指令以 ; 分号结尾,指令与参数间以空格符号分隔;
指令块以 {} 大括号将多条指令组织在一起;
include 语句允许组合多个配置文件以提升可维护性;
使用 # 符号添加注释,提高可读性;
使用 $ 符号使用变量;
部分指令的参数支持正则表达式;

  • 典型配置参数
user  nginx;                        # 运行用户,默认即是nginx,可以不进行设置
worker_processes  1;                # Nginx 进程数,一般设置为和 CPU 核数一样
error_log  /var/log/nginx/error.log warn;   # Nginx 的错误日志存放目录
pid        /var/run/nginx.pid;      # Nginx 服务启动时的 pid 存放位置

events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    worker_connections 1024;   # 每个进程允许最大并发数
}

http {   # 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
    # 设置日志模式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
	charset utf-8;  		  # 添加字符集设置
    access_log  /var/log/nginx/access.log  main;   # Nginx访问日志存放位置

    sendfile            on;   # 开启高效传输模式
    tcp_nopush          on;   # 减少网络报文段的数量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持连接的时间,也叫超时时间,单位秒
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;      # 文件扩展名与类型映射表
    default_type        application/octet-stream;   # 默认文件类型

    include /etc/nginx/conf.d/*.conf;   # 加载子配置项
    
    server {
    	listen       80;       # 配置监听的端口
    	server_name  localhost;    # 配置的域名
    	
    	location / {
    		root   /usr/share/nginx/html;  # 网站根目录
    		index  index.html index.htm;   # 默认首页文件
    		deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
    		allow 172.168.33.44;# 允许访问的ip地址,可以为all
    	}
    	
    	error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面
    	error_page 400 404 error.html;   # 同上
    }
}

server 块可以包含多个 location 块,location 指令用于匹配 uri,语法:

location [ = | ~ | ~* | ^~] uri {
	...
}

指令后面:

=精确匹配路径,用于不含正则表达式的 uri 前,如果匹配成功,不再进行后续的查找;
^~ 用于不含正则表达式的 uri 前,表示如果该符号后面的字符是最佳匹配,采用该规则,不再进行后续的查找;
~ 表示用该符号后面的正则去匹配路径,区分大小写;
~* 表示用该符号后面的正则去匹配路径,不区分大小写。跟 ~优先级都比较低,如有多个location的正则能匹配的话,则使用正则表达式最长的那个;
如果 uri 包含正则表达式,则必须要有 ~~* 标志。

3.2、指定定错误页面

# 根据状态码,返回对于的错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    root /source/error_page;
}

执行命令 nginx -s reload,成功后浏览器访问

四、正反向代理

正向代理

正向代理: 如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。下面是正向代理的原理图。

img

反向代理配置
  • 反向代理
    反向代理是工作中最常用的服务器功能,经常被用来解决跨域问题,下面简单介绍一下如何实现反向代理。

解释一下跨域
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
在这里插入图片描述

打开并编辑nginx.conf文件

server {
	        listen       80; # 监听的端口
	        listen       [::]:80 default_server;
	        server_name  localhost; # 域名
	        root         /usr/share/nginx/html;
	
	        # Load configuration files for the default server block.
	
	        location / {
			proxy_pass http://localhost:8080;
	        }
 }

在location中设置proxy_pass参数值,即为指定域名的跳转地址;当访问本地的80端口时,nginx服务器会自动的转发请求到8080端口。
注意:在修改完之后,需要重新加载配置文件,nginx -s reload

当然,不止是在本机的不同端口进行转发,也可以转发到另外一台服务器上面,把上面的proxy_pass的值设为http://www.baidu.com,访问本地即可访问百度首页。

  • 实战

比如我们监听 9001 端口,然后把访问不同路径的请求进行反向代理:

把访问 http://127.0.0.1:9001/edu 的请求转发到 http://127.0.0.1:8080
把访问 http://127.0.0.1:9001/vod 的请求转发到 http://127.0.0.1:8081
这种要怎么配置呢,首先同样打开主配置文件,然后在 http 模块下增加一个 server 块:

server {
  listen 9001;
  server_name localhost;

  location ~ /edu/ {
    proxy_pass http://127.0.0.1:8080;
  }
  
  location ~ /vod/ {
    proxy_pass http://127.0.0.1:8081;
  }
 
}

跳转文件

http {
    include mime.types;
    default_type text/html;

    server {
        # 其他配置...

        location /admin {
            alias /home/nginx/nginx-1.28.0/admin.html;
			default_type text/html;
        }

        # 其他配置...
    }
}

五、负载均衡

关于Nginx的负载均衡

  在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。

1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....

upstream mysvr { 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333 backup;  #热备     
}

2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....

upstream mysvr { 
    server 127.0.0.1:7878;
    server 192.168.10.121:3333;       
}

3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....

upstream mysvr { 
    server 127.0.0.1:7878 weight=1;
    server 192.168.10.121:3333 weight=2;
}

4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。

upstream mysvr { 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333;
    ip_hash;
}

关于nginx负载均衡配置的几个状态参数讲解。

  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
 upstream mysvr { 
      server 127.0.0.1:7878      weight=2 max_fails=2 fail_timeout=2;
      server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
    }

IP哈希

  • 以ip_hash为例演示

修改nginx配置文件

vi /usr/local/nginx/conf/nginx.conf

upstream mysvr { 
    server 10.0.54.101:80;
    server 10.0.54.102:80;
    ip_hash;
}
server {
    ....
    location  ~*^.+$ {         
        proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表         
    }
}

image-20250317152119918

检测有无错误

nginx -t

posted @ 2025-06-09 14:06  DYF-linux  阅读(524)  评论(0)    收藏  举报