安装
- 官网复制 yum 源
- 使用 vim 创建 etc/yum.repos.d/nginx.repo文件,将下面的内容复制到文件中。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
- 将 2 中的文件 OS 改为 centos, OSRELEASE 改为 7 保存(centos7对应自己服务器的系统)。
yum install nginx
安装nginx -v
验证是否安装成功nginx
启动 nginx
-
nginx 启动: start nginx
-
nginx 停止: nginx -s stop
-
nginx 退出: nginx -s quit
-
nginx 重启: nginx -s reload
-
nginx默认的页面存放地址:/usr/share/nginx/html/
-
nginx的配置文件地址: /etc/nginx/nginx.conf
基本配置
- main:配置nginx全局的指令。
- events块:配置影响nginx服务器或与用户的网络连接。
- http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块,可以有多个server。
- server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- location块:配置请求的路由,以及各种页面的处理情况。
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
该配置文件说明参考链接 https://www.runoob.com/w3cnote/nginx-setup-intro.html
反向代理
-
正向代理(forward proxy):一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标,然后代理向原始服务器转发请求并将获得的内容返回给客户端,我们平时说的代理就是指正向代理。(可以理解为A向C借钱,由于一些情况不能直接向C借钱,于是A想了一个办法,他让B去向C借钱,这样B就代替A向C借钱,A就得到了C的钱,C并不知道A的存在,B就充当了A的代理人的角色。)
-
反向代理(Reverse Proxy):以代理服务器来接受网络上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求的客户端,此时代理服务器对外表现为一个反向代理服务器。反向代理可以用来保护内网安全 、实现负载均衡 、缓存,减少服务器的压力 。(可以理解为A向B借钱,B没有拿自己的钱,而是悄悄地向C借钱,拿到钱之后再交给A,A以为是B的钱,他并不知道C的存在。 )
- 防火墙配置(在通过firewall-cmd --zone=public --add-port=80/tcp --permanent添加需要开放的端口后使用firewall-cmd --reload重启)
systemctl start firewalld 启动防火墙
systemctl status firewalld 查看防火墙状态
systemctl stop firewalld 禁用防火墙
firewall-cmd --zone=public --list-ports 查看所有打开的端口
firewall-cmd --reload 更新防火墙规则
firewall-cmd --zone=public --add-port=80/tcp --permanent 添加端口
firewall-cmd --zone= public --remove-port=80/tcp --permanent 删除端口
- 编辑nginx默认文件(vim /etc/nginx/nginx.conf ),修改成功后重启nginx即可将本地80端口代理到3000端口下。
server {
listen 80 ;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
-
location常用匹配规则
- = 严格匹配。
- ^~ url 前一旦匹配到就会处理,不再去匹配其他正则 url,一般用来匹配目录。
- ~ url前匹配正则区分大小写
- ~* url前匹配正则不区分大小写
-
配置静态文件地址(将访问静态文件匹配到static开头的路径代理到81端口下)
server {
listen 81;
server_name localhost;
location / {
root /root/nginx81;
}
}
server {
listen 80 ;
server_name localhost;
location ^~ /static {
proxy_pass http://127.0.0.1:81/; #81后面不加/时代理的是http://127.0.0.1:81/static
}
}
负载均衡
将客户端请求转发到不同应用服务器上,减轻单个服务器压力。
当访问8080时,会将服务分摊到81和82端口上。
upstream server1 {
server 127.0.0.1:81 weight=2;
server 127.0.0.1:82;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://server1;
}
}
配置字段:
- down 当前server暂时不参与负载。
- weight 默认为1 weight越大权重就越大。
- ip_hash 每个请求按访问ip的hash结果分配,固定ip,可以解决session的问题。
- fail_timeout max_fails次失败后,暂停的时间。
- max_fails 允许请求失败的次数.