IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux nginx搭建与配置 -> 正文阅读

[系统运维]linux nginx搭建与配置

安装

  • 方法一,使用epel源
    安装epel源

yum -y install epel-release

出现epel源

[root@localhost yum.repos.d]# ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-Media.repo          epel.repo
CentOS-CR.repo         CentOS-Sources.repo        epel-testing.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo
CentOS-fasttrack.repo  CentOS-x86_64-kernel.repo

yum -y install nginx

  • 方法二,使用官方提供的nginx源

rpm -uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
修改yum源
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx.repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

启动Nginx并设置开机启动

systemctl start nginx.service
systemctl enable nginx.service
检查安装版本
nginx -v
重启
/usr/sbin/nginx -s stop
/usr/sbin/nginx -s start

配置文件

配置文件位置:

/etc/nginx

[root@localhost yum.repos.d]# ls /etc/nginx
conf.d                  koi-utf             scgi_params
default.d               koi-win             scgi_params.default
fastcgi.conf            mime.types          uwsgi_params
fastcgi.conf.default    mime.types.default  uwsgi_params.default
fastcgi_params          nginx.conf          win-utf
fastcgi_params.default  nginx.conf.default
  • 查看nginx.conf主配置文件

  • 查找默认的安装位置

find / -name *nginx*

[root@localhost /]# find / -name *nginx*
/run/nginx.pid
/sys/fs/cgroup/systemd/system.slice/nginx.service
/etc/systemd/system/multi-user.target.wants/nginx.service
/etc/systemd/system/nginx.service.d
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/var/tmp/systemd-private-9fbd51e7c0714a37bc28f8f7aee49468-nginx.service-CmQIIT
/var/lib/yum/yumdb/n/f8a4655b1aa3ca9c0275be2d64ea287e99fc7217-nginx-filesystem-1.20.1-9.el7-noarch
/var/lib/yum/yumdb/n/85502cf4b35f5368569b0b62e550755496b72249-nginx-1.20.1-9.el7-x86_64
/var/lib/nginx
/var/log/nginx
/tmp/systemd-private-9fbd51e7c0714a37bc28f8f7aee49468-nginx.service-szPRoy
/usr/bin/nginx-upgrade
/usr/sbin/nginx
/usr/lib/systemd/system/nginx.service
/usr/lib/systemd/system/nginx.service.d
/usr/lib64/nginx
/usr/share/doc/nginx-1.20.1
/usr/share/licenses/nginx-1.20.1
/usr/share/man/man3/nginx.3pm.gz
/usr/share/man/man8/nginx-upgrade.8.gz
/usr/share/man/man8/nginx.8.gz
/usr/share/nginx
/usr/share/nginx/html/nginx-logo.png
/usr/share/vim/vimfiles/ftdetect/nginx.vim
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim

  • 查看启动的service配置
[root@localhost /]# cat /etc/systemd/system/multi-user.target.wants/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true

[Install]
WantedBy=multi-user.target

可以发现安装到了/usr/sbin/nginx下

文件配置解读

[root@localhost /]# cat /etc/nginx/nginx.conf

# 运行用户
user nginx;
# 启动进程 一般与cpu数量相等
worker_processes auto;
# 全局错误日志
error_log /var/log/nginx/error.log;
# 进程日志文件位置
pid /run/nginx.pid;

# 包含了子配置文件
include /usr/share/nginx/modules/*.conf;
# 工作模式以及链接上限
events {

    use epoll;
    #epoll 是多路复用,IO模型中的一种,仅适用与linux2.6以上的内核,可以大大提高nginx的性能
    worker_connections 1024;
    #单个后台worker_processes 进程的最大并发数
}

http {
    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  /var/log/nginx/access.log  main;
	# sendfile 指令指定nginx是否调用sendfile函数(zero copy 方式),来输出文件,对于普通应用必须设置为on,如果用来进行下载等应用IO负载应用,可设置为off,以平衡磁盘与网络io处理速度,降低系统的uptime
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    #链接超时时间
    keepalive_timeout   65;
    types_hash_max_size 4096;
	# 设定mime类型,类型由mime.types文件定义
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
	#开启gzip压缩
	gzip on;
	gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    #设定请求缓冲
	client_header_buffer_size 1k;
	large_client_header_brffers 4 4k;
    include /etc/nginx/conf.d/*.conf;

	#设定负载均衡的服务器列表
	upstream myserver{
		#weight 表示权重
		server 192.168.31.10:8080 weight=3 
		server 192.168.31.11:8080 weight=3 
		server 192.168.31.12:8080 weight=3 
	}

    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2;
#        listen       [::]:443 ssl http2;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

变量说明

变量名含义
$remote_addr用以记录客户端的ip地址
$http_x_forwarded_for用以记录客户端的ip地址
$remote_user用来记录客户端用户名称
$time_local用来记录访问的时间与时区
$request用来记录请求的url与请求协议(http/https)
$status记录请求状态:成功时200等
$body_bytes_send记录发送给客户端文件主体内容大小
$http_referer记录从哪个页面链接过来的

nginx 基于域名的虚拟主机

server {
        listen       80;
        listen       [::]:80;
        server_name  myserver my.server;
        location = / {
        	root /nginx/html;
        	index index.html index.htm;
        }
        
        

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

反向代理

  • 代理分为两种:正向代理 ,反向代理

正向代理即代理的时服务端:如客户端访问 www.baidu.com,客户端发送请求到我们的代理端,假设是nginx,nginx再转发请求到www.baidu.com,nginx再把请求结果返回给客户端。
反向代理即服务端代理 :如客户端访问的是nginx服务192.168.31.10/search,但是,nginx服务器访问了服务www.baidu.com/search,将结果返回给客户端。

  • 反向代理配置
配置参数说明
proxy_pass真实web/app服务器IP地址
proxy_redirect如果真实服务器使用的时真的IP非默认端口,则改成ip+默认端口
proxy_set_header重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP启用客户端真实地址(如果未启用,Nginx的日志,记录的只有当前层代理日志,不会追溯源地址)
proxy_set_header X-Forwarded-For记录代理地址
proxy_connect_timeout后端服务器链接的超时时间,发起三次握手的等待超时时间
proxy_send_timeout后端服务器传回数据时间,在规定的时间内必须完成传输
proxy_read_timeoutnginx接收upstream(上游/真实)server数据超时,默认60s,如果连续的60s内没有接收到一个字节,连接关闭
proxy_buffering on开启缓存
proxy_buffer_size只是响应头的缓冲大小
proxy_buffers 4 128k内容缓冲区域大小,一般设置的比较大,以响应网页,单个缓冲区的大小由系统内存叶决定,一般4k,proxy_buffers由缓冲数和缓冲区大小组成,总大小为number*size
proxy_busy_buffers_size 256k从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方
proxy_max_temp_file_size 256k超大的响应头存储文件
server {
        listen       80;
        server_name  www.mytest.com;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        # include /etc/nginx/default.d/*.conf;
		 location = / {
		 	proxy_pass http://192.168.31.11:80;
		 	proxy_set_header Host $http_host;
		 	proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
		 	proxy_set_header X-Real-Proto $scheme;
		 	proxy_set_header X-Nginx-Proxy true;
			
			proxy_connect_timeout 30;
			proxy_send_timeout  60;
			proxy_read_timeout  60;

			proxy_buffering on;
			proxy_buffer_size 32k;
			proxy_buffers 4 128k;
			proxy_busy_buffers_size  256k;
			proxy_max_temp_file_size 256k;
			 
        }


        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }

Nginx 负载均衡

基于反向代理,在我们需要减轻服务器的压力时,需要反向代理多台服务器,从而减少单台服务器压力。

upstream webapp {
	server 192.168.31.11:80;
	server 192.168.31.12:80;
}
server {
	listen 80;
	server_name localhost;
	location / {
		proxy_pass http://webapp; 
	}
}

  • 热备配置
upstream webapp {
	server 192.168.31.11:80;
	server 192.168.31.12:80 backup; #热备
}

  • 轮询权重配置
upstream webapp {
	server 192.168.31.11:80 weight=1;
	server 192.168.31.12:80 weight=2;
}

  • ip_hash,根据客户端ip去hash访问:即同一个ip访问到的一定时同一个服务器
upstream webapp {
	ip_hash;
	server 192.168.31.11:80 ;
	server 192.168.31.12:80 ;
}

Nginx会话保持(同一ip持续访问到一个服务器)

  • ip_hash

upstream webapp {
ip_hash;
server 192.168.31.11:80 ;
server 192.168.31.12:80 ;
}

ip_hash使用原地址哈希算法,将同一客户端的请求总是发往同一台服务器
当后端服务宕机后不可用
不适于前端还有代理的情况,必须是只有一层代理,如果有两层代理就不可用
同一局域网的客户会被发送到同一台服务器

  • sticky_cookie_insert
    使用sticky_cookie_insert启用会话亲情关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器,与ip_hash不同的是,他不是基于ip来判断客户端的,而是基于cookie来判断,一次避免了上述ip_hash中来自同一局域网的客户端丢失负载均衡的情况。

upstream webapp {
server 192.168.31.11:80 ;
server 192.168.31.12:80 ;
sticky_cokkie_insert srv_id expires=1h domain=3evip.cn path=/;
}

说明:
expires :浏览器保持cookie的时间
domain :定义cookie的域
path:为cookie定义路径

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:29:31  更:2022-05-07 11:30:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:30:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码