Nginx从入门到哭泣

我们项目之前我一直不会调整,看了如下的文章立马上升了一个档次

一.1 yum安装

yum install nginx -y

一.2 二进制 安装

下载地址:http://nginx.org/en/download.html

  1. 下载完上传Linux服务器上,一般安装在/usr/local下,进行解压
tar -zxvf nginx-1.18.0.tar.gz
  1. 进行配置,在nginx根目录下执行
# 1.安装编译工具文件库
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

# 2.使用默认配置
./configur

# 3.然后回车,进行编译
make

# 4.然后回车,安装
make install

# 注意:如果自定义安装
# 1. 创建nginx临时目录
mkdir -p /var/temp/nginx

# 2. 进入nginx安装目录,指定配置文件
./configure \
--prefix=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf  \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_stub_status_module \
--with-http_ssl_module 
# --with-http_ssl_module 是配置支持https

# 3.编译、安装
make
make install
  1. 查找安装路径:
whereis nginx
# 默认在/usr/local/nginx

卸载Nginx:

# 关闭nginx进程
./nginx -s stop
rm -rf /user/local/nginx
make clean

二.常用命令

启动/停止/退出nginx:

# 启动
cd /usr/local/nginx/sbin/
./nginx
start nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

# 停止
./nginx -s stop

# 安全退出,优雅退出
./nginx -s quit

# 重新加载配置文件
./nginx -s reload

# 查看配置文件是否错误
./nginx -t

# 查看nginx进程
ps aux|grep nginx

设置nginx开机启动:

vim /etc/rc.local
然后在底部增加
/usr/local/nginx/sbin/nginx

其他命令:

# 开启防火墙
service firewalld start
# 关闭防火墙
service firewalld stop
# 查询端口是否开放
firewall-cmd --query-port=8080/tcp
# 开放80端口
firewall-cmd --permanent --add-port=80/tcp
# 移除端口
firewall-cmd --permanent --remove-port=8080/tcp

三. 核心配置文件结构

配置文件默认是放在/usr/local/nginx/conf/nginx.conf,配置文件中默认有三大块:全局块、events块、http块。

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

1. 全局块

work process指令:
nginx是进程模型,分为主进程、工作进程。

master_process:用来指定是否开启工作进程。

worker_processes:配置Nginx生成工作进程的数量,一般与CPU的内核数-1数保存一致。

# 设置工作进程
worker_processes  2;

2.events块

accept_mutex指令:

配置:accept_mutex on|off ;用来设置Nginx网络连接序列化。

worker_connections指令:

默认是 worker_commections 512;用来配置单个worker进程最大的连接数;

(单个worker进程最大的连接数 * N个worker线程),这个值不能大于操作系统支持打开的最大文件句柄数量。(Linux一般是65535)


# 修改操作系统支持打开的最大文件句柄数量,临时修改
ulimit -HSn 2048
# 永久修改
vi /etc/security/limits.conf

3.http块

include指令:
包含和导入外部文件,进行模块化的划分。

include mime.types;
default_type application/octet-stream;

sendfile指令:
启用文件的高效传输,打开有利于文件传输的性能。

sendfile   on;  # 启用高效传输,与tcp_nopush联合使用
tcp_nopush on;  # 当请求累积一定大小的时候,在进行发送

keepalive_requests指令:
用来设置一个keep-alive连接使用的次数,客户端连接服务的超时时间。
gzip指令:
开启它有利于文件和请求数据的传输。
gzip on

3.server块:

用来设置虚拟主机服务名称。

server {
	listen 80;
	server_name www.xx1.cn www.xx2.cn;
	# 可以配置多个,也可以通配符进行配置 *.itcast.cn www.itcast.* 注意*只能在首尾部分
}

location指令:(用来设置请求的URI。)


server {
	...
	server_name xxx.cn
	# 可以在location后面加=(精确匹配)~(支持正则)~*(支持正则,支持大写)
	location /abc{
		default_type text/plain;
		return 200 "access success";
	}
}

error_page指令:(设置网站的错误页面。)

server {
	error_page 404 http://www.404.cn;
}
或者
server{
	error_page 404 /50x.html;
	error_page 500 502 503 504 /50x.html;
	location =/50x.html{
		root html;
	}
}

gzip_static指令:

# 1.查询当前Nginx的配置参数
nginx -V
# 2.清楚编译内容
cd /root/nginx/core/nginx-xxx
make clean
# 3.使用configure来配置参数
./configure (...之前的内容) --with-http_gzip_static_module
# 4.进行编译
make
# 5.将objs目录下的nginx二进制执行文件移动到nginx安装目录下的sbin下
mv objs/nginx /usr/local/nginx/sbin
# 6.执行更新命令
make upgrade
# 7.在配置文件http块下添加
gzip_static on
proxy块:(反向代理模块)

proxy_set_header指令: 可以更改Nginx服务器接收到的客户端请求的请求头信息,然后 将新的请求头发送给代理的服务器。

server {
	listen 8080;
	server_name localhost;
	# 设置DNS的IP,用来解析proxy_pass域名
	resolver 8.8.8.8;
	location /server {
		proxy_pass http://192.168.xx.xx:8080/;
		proxy_set_header username TOM;
	}
}

四. 配置文件案例:

# 全局块
# 配置允许运行Nginx工作进程的用户和用户组
user www;
# 一般是CPU核数-1
worker_processes 2; 

# 配置Nginx服务器运行对错误日志存放的路径
error_log logs/error.log;
pid logs/nginx.pid;

# 全局块
events{
	accept_mutex on;
	multi_accept on;
	# 设置Nginx的worker进程最大的连接数
	worker_connections 1024;
}
# http
http{
	include mime.types;
	default_type application/octet-stream;
	# 配置允许使用sendfile方式运输,开启高效的文件传输
	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	# 配置连接超时时间
	keepalive_timeout 65;
	
	# Gzip压缩功能配置
	include /home/www/gzip/nginx_gzip.conf;
	# 配置请求处理日志格式
	log_format server1 '===>server1 access log';
	# log_format server2 '===>server2 access log';
	
	# server块 开始 #
	include /home/www/conf.d/*.conf;
	# server块 结束 #

}

server1的配置文件

server{
	listen 8081;
	# 设置虚拟主机服务名称,可以用域名,多个空格隔开,也可以通配符"*“例子:*.good.cn
	server_name localhost;
	# 配置请求处理日志存放路径
	access_log /home/www/myweb/server1/logs/access.log server1;
	
	location /server1/location1{
		root /home/www/myweb;
		index server1.html;
	}
	location /server1/location2{
		root /home/www/myweb;
		index server2.html;
	}
	# 配置错误页面转向
	location = /404.html {
		root /home/www/myweb;
		index 404.html;
	}
}

nginx_gzip.conf的配置文件

# 开启gzip功能
gzip on;
# 压缩源文件类型,例 application/javascript application/html;在mine.types里查看。
gzip_types *; 
# 压缩级别 1-9
gzip_comp_level 6; 
# 进行压缩响应页面的最小长度,小于这个数不进行压缩
gzip_min_length 1024k;
# 缓存空间大小,使用默认就好
gzip_buffers 4 16K; 
# 指定压缩响应所需要的最低HTTP请求版,使用默认就好
gzip_http_version 1.1;
# 往头信息中添加压缩标识,默认是off
gzip_vary on;
# 对IE6以下的版本都不进行压缩
gzip_disable "MSIE [1-6]\.";

解决跨域问题:
location /xxx{
	add_header ‘Access-Control-Allow-Origin’ *;
	add_header ‘Access-Control-Allow-Credentials’ 'true';
	add_header ‘Access-Control-Allow-Methods’ GET,POST,PUT,DELETE;
	add_header ‘Access-Control-Allow-Headers’ *;
	root /home/www/myweb;
	index server1.html;
}

解决静态资源防盗链:
## 用valid_referers指令,如果在添加上域名或者IP地址,如果该值为1就返回403


location /xxx {
	valid_referers none blocked www.baidu.* 127.0.0.1;
	if ($invalid_referer){
		# 返回403
		return 403
		# 如果让该图片显示其他默认图片
		rewrite ^/ /images/图片名.png break;
	}
	root /usr/local/nginx/html;
}

# 如果不算这个域名,会重定向403
valid_referers *.goodysr.cn
if($invalid_referer){
	return 403
}
Rewrite域名跳转:
访问xxx1、xxx2域名 会跳转到zong的域名下。


server {
	listen 80;
	server_name www.xxx1.com www.xxx2.cn;
	rewrite ^(.*) http://www.zong.cn$1;
	# 也可以某个路径下进行跳转
	location /user {
		rewrite ^/user(.*)$ http://www.user.cn$1;
	}
}

五. 配置SSL:

下载证书。

server {
	listen 80;
	server_name 域名;
	# 将http请求重定向https上
	rewrite ^(.*)$ https://$host$1;
	location / {
		root html;
		index index.html index.htm;
	}
}
server {
	listen 443 ssl;
	server_name 域名;
	root html;
	index index.html index.htm;
	# 证书文件
	ssl_certificate cert/xxx.pem;
	ssl_certificate_key cert/xxx.key;
	ssl_session_cache shared:SSL:1m;
	ssl_session_timeout 5m;
	# 加密规则
	ssl_ciphers HIGH:!aNULL:!MD5;
	# 表示使用TLS协议类型
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2
	ssl_prefer_server_ciphers on;
	location / {
		root html;
		index index.html index.htm;
	}
}

六. 配置负载均衡:

down 不参与负载均衡
backup 备份服务器,不执行,当主服务挂的时候才执行
max_fails 允许请求失败的次数,max_fails =3
fail_timeout 经过max_fails失败后,服务暂停时间,fail_timeout=15
max_conns 限制最大的接收连接数,当这台机器最大并发是100,也就是值为100

负载均衡策略有3个:
1.轮询 默认方式
2.weight 权重方式
3.ip_hash 根据ip分配方式 ,这样可以解决session不共享问题

upstream backend{
	ip_hash;
	server 127.0.0.1:9091;
	server 127.0.0.1:9092;
}
# 负载均衡配置
upstream backend {
	server 127.0.0.1:9091 down;
	server 127.0.0.1:9092 max_conns=100 weight=1;
	server 127.0.0.1:9093 weight=2;
}
upstream backend2{
	hash &request_uri;
	server 127.0.0.1:9091;
	server 127.0.0.1:9091;
}
server {
    listen       80;
    server_name  localhost;
    location / {
        #root   html;
        #index  index.html index.htm;
		proxy_pass http://backend;
    }	
    location /backend2/ {
		proxy_pass http://backend2;
	}
}

七. 配置缓存:

http{
	# 设置缓存根目录 levels缓存规则 keys_zone缓存名,缓存大小,1m=8000连接地址
 	# inactive缓存多久会被情况 max_size缓存空间最大空间
	proxy_cache_path /usr/local/cache levels=2:1 keys_zone=缓存名:200m inactive=1d max_size=20g;
	
	upstream backend{
		server 192.168.200.146:8080;
	}
	server {
		listen 8080;
		server_name localhost;
		location / {
			# 设置不缓存 如果是js文件不进行缓存
			if ($request_uri ~ /.*\.js$){
				set $nocache 1;
			}
			proxy_no_cache $nocache $cookie_nocache $arg_nocache $arg_comment;
			proxy_cache_bypass $nocache $cookie_nocache $arg_nocache $arg_comment;
			proxy_cache 缓存名;
			proxy_cache_key $scheme$proxy_host$request_uri;
			# 当请求为5次才进行缓存
			proxy_cache_min_uses 5;
			# 当缓存状态码是200 ,缓存时长5天
			proxy_cache_valid 200 5d;
			# 当缓存状态码是404,缓存时长30s
			proxy_cache_valid 404 30s;
			proxy_cache_valid any 1m;
			add_header nginx-cache"$upstream_cache_status";
			proxy_pass http://backend;
		}
	}
}

删除对应的缓存目录:

rm -rf /usr/local/proxy_cache/......

八. 动静分离:

upstream webservice{
	# tomcat地址
	server 192.168.10.xxx:8080;
}
server {
	listen 80;	
	server_name localhost;
	# 动态资源
	location /demo {
		proxy_pass http://webservice;
	}
	# 静态资源
	location ~/.*\.(png|jpg|gif|js){
		root html/web; # 静态文件地址
		gzip on;
	}
	location / {
		root html/web;
		index index.html index.htm;
	}
}

九.搭建高可用Nginx集群:

准备两台Nginx机器,需要在这两台机器安装Keepalived,通过 VRRP 协议实现高可 用功能。

安装Keepalived

步骤1:从官方网站下载keepalived,官网地址 https://keepalived.org/
步骤2:将下载的资源上传到服务器 
keepalived-2.0.20.tar.gz
步骤3:创建keepalived目录
mkdir keepalived
步骤4:将压缩文件进行解压缩,解压缩到指定的目录
tar -zxf keepalived-2.0.20.tar.gz -C keepalived/
步骤5:对keepalived进行配置,编译和安装
cd keepalived/keepalived-2.0.20
./configure --sysconf=/etc --prefix=/usr/local
make && make install

修改配置文件,一般在 /etc/keepalived/keepalived.conf ,我们进行配置

global_defs {
	# 当keepalived发送切换时需要发email给具体的邮箱地址
	notification_email {
		xx1@xx1.com
		xx2@xx2.com
	}
	# 设置发件人的邮箱信息
	notification_email_from yy@xx3.com
	# 指定smpt邮箱服务地址
	smtp_server 192.168.200.1
	smtp_connect_timeout 30
	# 服务器的一个标识 A机器
	router_id keepalivedA
	vrrp_skip_check_adv_addr
	vrrp_strict
	vrrp_garp_interval 0
	vrrp_gna_interval 0
}
vrrp_instance VI_1 {
	# 两个值可选 MASTER主机 BACKUP从机
	state MASTER
	# 非抢占,这个参数只能用于state为backup
	# 所以我们把state都设置成backup 让其通过priority来竞争,实现主机和从机
	nopreempt
	interface ens33
	virtual_router_id 51
	# 优先级高的将成为主机
	priority 100
	advert_int 1
	authentication {
		# 认证方式
		auth_type PASS
		# 指定认证使用的密码,最多8位
		auth_pass 1111
	}
	virtual_ipaddress {
		# 虚拟IP地址设置虚拟IP地址
		192.168.200.222
	}
}

启用keepalived

cd /usr/local/sbin
./keepalived

编写脚本实现自动切换
在keepalived配置文件中添加对应的配置像

gloval_defs{
	....
}

# ck_n为脚本名称
vrrp_script ck_n{
	script "脚本位置"
	interval 3 #执行时间间隔
	weight -20 #动态调整vrrp_instance的优先级
}

vrrp_instance VI_1 {
	...
	virtual_ipaddress {
		192.168.200.111
	}
	# 使用Shell脚本
	track_script {
		ck_n
	}
}

编写脚本,内容:监听nginx运行状态,如果nginx启动失败,尝试再次启动,如果启动失败,关掉keepalived进程。

#!/bin/bash
num=`ps -C nginx --no-header | wc -l`
 if [ $num -eq 0 ];then
 /usr/local/nginx/sbin/nginx
 sleep 2
if [ `ps -C nginx --no-header | wc -l` -eq 0 ]; then
 killall keepalived
fi
fi



为脚本文件设置权限
chmod 755 ck_nginx.sh

常见问题
启动失败找不到pid文件

mkdir -p /var/run/nginx/
# 指定配置文件进行重启
nginx -C /usr/local/nginx/conf/nginx.conf
# 重启
nginx -s reload

配置环境变量:

vim /etc/profile
# 在文件末尾加上
export NGINX_HOME=/usr/local/nginx
export PATH=$NGINX_HOME/sbin:$PATH

设置开机自动启动:

vim /lib/systemd/system/nginx.service
# 在文件添加
[Unit]
#描述服务
Description=nginx
#描述服务类别
After=network.target
 
#服务运行参数的设置,注意【Service】的启动、重启、停止命令都要用绝对路径
[Service]
#后台运行的形式
Type=forking
#服务具体运行的命令
ExecStart=/usr/local/nginx/sbin/nginx
#重启命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload
#停止命令
ExecStop=/usr/local/nginx/sbin/nginx -s quit
#表示给服务分配独立的临时空间
PrivateTmp=true
 
#运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
[Install]
WantedBy=multi-user.target

# 然后 修改文件权限
chmod 755 /usr/lib/systemd/system/nginx.service
# 设置开机自启动
systemctl enable nginx.service

未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值