0
点赞
收藏
分享

微信扫一扫

linux nginx搭建与配置

猫er聆听没落的旋律 2022-05-05 阅读 96

安装

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

出现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

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

启动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;
        }
      }

反向代理

  • 代理分为两种:正向代理 ,反向代理
  • 反向代理配置
配置参数说明
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

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

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

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

举报

相关推荐

linux配置nginx

Linux配置nginx

Linux配置Nginx

Linux nginx nginx-1.20.1 快速搭建

linux Nginx http服务搭建

linux - nginx配置ssl

0 条评论