Linux编译安装配置 Nginx
Linux安装配置 Nginx
一、下载Nginx安装包
nginx官网:
找到我们所需要版本,把鼠标移动到上面,右键打开链接进行下载
下载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安装目录下:
启动命令:
#启动脚本是在 /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
# 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,则需要通过代理服务器来访问,这种代理服务就称为正向代理。下面是正向代理的原理图。

反向代理配置
- 反向代理
反向代理是工作中最常用的服务器功能,经常被用来解决跨域问题,下面简单介绍一下如何实现反向代理。
解释一下跨域
当一个请求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 定义的服务器列表
}
}
检测有无错误
nginx -t


浙公网安备 33010602011771号