Nginx运行原理




一个master配置文件中可以设置多个 worker_processes
可以使用nginx -s reload 热部署,利于nginx做热部署操作
对于每个 worker_processes都是独立的进程,不需要加锁,采用独立的进程,可以互相之间不会影响,一个进程退出后,其他进程依旧工作,不会造成请求中断

worker_processes数和服务器cpu数量相等是最合适的

连接数:worker_connection
一个请求占用2~4个连接数

并发数:
普通静态访问最大并发数量为:
worker_connection * worker_processes /2

如果是HTTP作为反向代理最大并发数量为:
worker_connection * worker_processes /4

Nginx安装

https://nginx.org/


将下载好的压缩包上传linux服务器并解压

解压命令

tar -zxvf nginx-1.20.2.tar.gz

安装nginx相关依赖

或者一键安装上面四个依赖

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

进入nginx解压后的根目录,配置SSL模块

./configure --prefix=/usr/local/nginx --with-http_ssl_module

/usr/local/nginx为启动的路径可自行配置
configure完成之后,会有如下信息,诸如日志文件,配置文件啥的
编译安装

make && make install

先检测nginx的配置是否正确进入/usr/local

./nginx -t

Nginx Linux基本操作指令

启动服务:./nginx
退出服务:./nginx -s quit
强制关闭服务:./nginx -s stop
重载服务:./nginx -s reload  (重载服务配置文件,类似于重启,但服务不会中止)
验证配置文件:./nginx -t
使用配置文件:./nginx -c “配置文件路径”
使用帮助:./nginx -h

可以查看nginx进程

ps -ef | grep nginx


在浏览器地址输入服务器ip回车出现如下页面,则表示安装成功(默认80端口)。

yum源安装报错问题解决

如果出现以下错误

解决方案
CentOS 8 yum安装软件时,提示无法从AppStream下载

检查网通不通,然后确定DNS解析是否正确。

ping www.baidu.com


有可能是所在网络环境在出口封了相应端口,需用其他方式,比如VPN解决。
我们无法使用CentOS原生yum源就是因为网络问题,你懂的。
为了快,更换国内yum源,推荐阿里云yum或者腾讯yum。网易没落了。
阿里yum源: https://developer.aliyun.com/mirror/centos
腾云yum源: https://mirrors.tencent.com/help/centos.html

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup.3
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos8_base.repo

清理之前的yum缓存

yum clean all

建立新的缓存

yum makecache


makecache的时候报错了!解决方案:
先看看CentOS的yum.repos.d
查看跟新后的CentOS-Base.repo文件

cat /etc/yum.repos.d/CentOS-Base.repo


找到跟新后CentOS-Base.repo中[AppStream]标签内的内容并复制
打开CentOS-AppStream.repo,注释掉原有内容,并插入新内容

重新运行yum makecache,操作成功

Nginx配置文件 nginx.conf

第一部分:全局块

第二部分:支持的最大连接数

第三部分:http全局块

1> 反向代理配置



当然也可配置多个server块进行反向代理操作

重启nginx后生效

Location指令说明

2>负载均衡配置

weight=1时默认轮询机制
upstream myserver{
server 47.108.71.54:8080 weight=1;
server 47.108.71.53:8081 weight=1;
}

upstream myserver{
ip_hash
server 47.108.71.54:8080 weight=1;
server 47.108.71.53:8081 weight=1;
}

如果配置了ip_hash 客户端的每个请求会根据ip的hash的结果匹配,这样每个访客固定访问一个后端服务器,可以解决session的问题,比如一个用户访问了8080那么这时候将信息存取到了session中,在访问的时候可能会访问8081服务器这时候读取session的时候就不存在会造成数据报错等问题。

upstream myserver{
server 47.108.71.54:8080 weight=1;
server 47.108.71.53:8081 weight=1;
fair;
}

如果配置了 fair(第三方) 按后端服务器根据响应时间分配请求,响应时间短的优先分配

3>动静分离配置


修改nginx默认端口

进入usr/local/nginx/conf 找到nginx.conf

修改端口后重启nginx即可

设置nginx开机自启

在 /usr/lib/systemd/system/ 目录下,创建nginx.service文件,并输入以下内容(并保存退出):

cd /usr/lib/systemd/system/
touch nginx.service
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=multi-user.target

设置开机启动

systemctl enable nginx.service
或
systemctl enable nginx

nginx其他命令:

systemctl start nginx.service (启动nginx服务)
systemctl stop nginx.service (停止nginx服务)
systemctl enable nginx.service (设置开机自启动)
systemctl disable nginx.service (停止开机自启动)
systemctl status nginx.service (查看服务当前状态)
systemctl restart nginx.service (重新启动服务)
systemctl list-units --type=service (查看所有已启动的服务)

Nginx高可用主备模式

默认下我们只有一台nginx,当nginx宕机后服务就会呈现一个不可用的状态,这时候我们就需要对nginx做集群,当主服务器nginx宕机后备用的nginx服务能自动顶上,这时就有一个东西叫keepalived,需要在两台服务器上郡安装nginxkeepalived

Keepalived:相当于路由,需要一个虚拟ip,自动检测nginx如果宕机了则将主服务器中的虚拟ip绑定到备用服务器

keepalived下载地址:

https://www.keepalived.org/download.html

安装keepalived:

解压:

tar xvf keepalived-2.2.4.tar.gz
cd keepalived-2.2.4

编译:

./configure --prefix=/usr/local/keepalived
make && make install

备份keeplived默认配置文件

cd /usr/local/keepalived/etc/keepalived/
cp keepalived.conf -d ./keepalived.conf_blk
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

复制/sbin/keepalived到/usr/sbin下

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

复制sysconfig文件到/etc/sysconfig下

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

#########################下面请注意#########################


下面这步,亲身经历就是:不做应该也能成功,做了反而可能不成功。大家自行决定是否执行


复制启动脚本到/etc/init.d下

cd /usr/local/keepalived
cp /usr/local/keepalived/etc/init.d/keepalived /etc/init.d/
chmod 755 /etc/init.d/keepalived

#########################上面请注意#########################

重新加载

systemctl daemon-reload

设置开机自动启动

systemctl enable keepalived.service

取消开机自动启动

systemctl disable keepalived.service

启动

systemctl start keepalived.service

查看状态

systemctl status keepalived.service

停止

systemctl stop keepalived.service

卸载keepalived

service keepalived stop
rm -rf /usr/local/keepalived
rm -rf /etc/keepalived
rm -rf /etc/init.d/keepalived
rm -rf /etc/sysconfig/keepalived
rm -rf /usr/local/sbin/keepalived
rm -rf /usr/sbin/keepalived
rm -rf /sbin/keepalived


配置好后重启keepalived使用命令 ip a 查看主服务器中存在虚拟ip

当关掉keepalived后,备份机查询ip a 会发现上面的虚拟会存在备份机中

keepalived.conf

global_defs {notification_email {   #接收通知的emailacassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc  #发送通知的emailsmtp_server 127.0.0.1 #smtp服务器地址smtp_connect_timeout 30router_id LVS_DEVEL  #主机名,运行的标识vrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {       #VI_1为自定义命名state MASTER           #这里表示为主服务器,如果是备份服务器则改为 BACKUPinterface eth0         #服务器的网卡名称virtual_router_id 51   #主、备机的id必须相同priority 100           #主、备机取不同的优先值,主机优先值>备份机优先值advert_int 1           #每隔多少秒发送一次心跳,检测对方nginx是否存活authentication {       #权限方式这里使用的是密码1111auth_type PASSauth_pass 1111}virtual_ipaddress {    #vrrp虚拟地址(重要)这里的主备机应取相同p作为虚拟ip的绑定(可绑定多个)192.168.200.16192.168.200.17192.168.200.18}
}vrrp_instance VI_2 {       #这里可以作为双主备使用主备相互关联state BACKUP           #这里表示为主服务器,如果是主服务器则改为 MASTERinterface eth0         #服务器的网卡名称virtual_router_id 52   #主、备机的id必须相同priority 100           #主、备机取不同的优先值,主机优先值>备份机优先值advert_int 1           #每隔多少秒发送一次心跳,检测对方nginx是否存活authentication {       #权限方式这里使用的是密码1111auth_type PASSauth_pass 1111}virtual_ipaddress {    #vrrp虚拟地址(重要)这里的主备机应取相同p作为虚拟ip的绑定(可绑定多个)192.168.200.16192.168.200.17192.168.200.18}
}




网卡名称(默认):


虚拟ip

这里说明一下虚拟ip,如果是内网的话就设置一个没有被路由使用的ip作为虚拟ip,如果需要虚拟ip能够外网访问并解析到域名这种那么你至少要准备三台外网服务器(拥有三个外网ip),一台作为域名解析和keepalived 的vrrp虚拟ip,其他两台可做为nginx集群使用。这样直接访问域名即可达到nginx高可用集群效果。

配置Nginx整合vue访问后端接口

nginx.conf

user  root;
worker_processes  4;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;pid        logs/nginx.pid;events {#线程    worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;
#该属性默认为off,表示如果header name中包含下划线,则忽略掉    underscores_in_headers on;log_format  main  '$upstream_http_content_type $http_Authorization' '$http_x_forwarded_for - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';#    access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;proxy_headers_hash_max_size 51200;proxy_headers_hash_bucket_size 6400;#gzip  on;# 现在访问速率
#    limit_req_zone $binary_remote_addr zone=allips:10m rate=50r/s;#HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式
#    add_header Strict-Transport-Security "max-age=515360000; includeSubDomains;preload" always;#每个域名/主机名一个配置文
include /usr/local/nginx/conf/vhosts/*.conf;#real_ip_recursive on;
#:是否递归解析,当real_ip_recursive配置为off时,Nginx会把real_ip_header指定的请求头中的最后一个IP作为真实客户端IP;当real_ip_recursive配置为on时,Nginx会递归解析real_ip_header指定的请求头,最后一个不匹配set_real_ip_from的IP作为真实客户端IP
#   real_ip_header X-Forwarded-For;
#set_real_ip_from192.168.0.0/16;
#:告知Nginx哪些是反向代理IP,即排除后剩下的就是真实客户端IP,支持配置具体IP地址、CIDR地址
}

域名.conf

upstream city {ip_hash;server 127.0.0.1:项目端口号;keepalive 64;}server{listen       80;server_name 域名;rewrite ^(.*) https://$server_name$1 permanent;
}server {listen       443 ssl;server_name  域名;ssl_certificate /usr/local/nginx/conf/cert/skyrim.city/xxxxxx.pem;ssl_certificate_key /usr/local/nginx/conf/cert/skyrim.city/xxxxxxx.key;ssl_session_timeout  5m;ssl_protocols  TLSv1 TLSv1.1 TLSv1.2 SSLv3;ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;ssl_prefer_server_ciphers on;error_log  /usr/local/nginx/logs/error.log;access_log  /usr/local/nginx/logs/access.log;sendfile        on;tcp_nopush      on;tcp_nodelay     on;keepalive_timeout  120;#allow 10.0.16.55;#deny all;gzip on;gzip_min_length 2k;gzip_buffers 4 16k;gzip_comp_level 9;gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript    application/octet-stream application/x-httpd-php image/jpeg image/gif image/png;gzip_vary off;gzip_disable "MSIE [1-6]\.";client_max_body_size 100m;client_body_buffer_size 256k;proxy_connect_timeout      90;proxy_send_timeout         90;proxy_read_timeout         90;proxy_buffer_size          256k;proxy_buffers              4 256k;proxy_busy_buffers_size    256k;proxy_temp_file_write_size 256k;proxy_max_temp_file_size   128m;#前端项目地址location ^~/ {root /home/lighthouse/city/html/;index index.html index.htm;try_files $uri $uri/ /index.html;}#后端服务location ^~/scuser-server {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';proxy_pass http://city;proxy_set_header Host $host;proxy_set_header X-Real_IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#后端服务location ^~/equipment-server {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';proxy_pass http://city;proxy_set_header Host $host;proxy_set_header X-Real_IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}#后端服务location ^~/file-server {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';proxy_pass http://city;proxy_set_header Host $host;proxy_set_header X-Real_IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

linux下nginx安装与配置说明相关推荐

  1. linux系统nginx安装教程,Linux下Nginx安装教程

    Linux下Nginx安装教程分享,具体内容如下 1.安装编译文件及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl op ...

  2. linux下nginx安装与设置开机启动

    http://www.myhack58.com/Article/sort099/sort0102/2015/66341.htm 环境准备 yum -y install gcc gcc-c++ auto ...

  3. VMware Linux 下 Nginx 安装配置 (一)

    资源准备 1. pcre-8.34.tar.gz: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 2. zlib-1.2.8.tar.g ...

  4. Linux下nginx安装与配置

    部分Linux发布版的默认安装已经集成了nginx,查看方法ls /usr/local,若已有nginx文件夹说明已集成. nginx依赖库pcre与zlib,且pcre依赖于gcc与gcc-c++, ...

  5. 项目部署三---linux下Nginx安装

    3.1 安装前检查依赖包是否安装 whereis nginx  ----检查是否安装nginx #yum -y install gcc pcre-devel zlib-devel openssl op ...

  6. Linux下Nginx安装证书

    1.服务器自带nginx修改配置 个人博客地址:note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.top 1.查看Nginx进程: ps -a ...

  7. Linux下Nginx编译安装后的开机自启动设置

    Linux下Nginx编译安装后的开机自启动设置 一.查看当前Nginx启动状态 二.而配置Nginx相关服务文件 三 .设置nginx命令 四.设置开机启动 五.测试开机启动 一.查看当前Nginx ...

  8. Linux下Nginx编译安装过程详解

    Linux下Nginx编译安装过程详解 一.Nginx介绍 二.Nginx源码下载 1.打开Nginx官网 2.下载官网的源码包 三.Nginx源码安装 1.解压源码包 2.安装开发包组及环境 3.编 ...

  9. linux下使用nginx搭建集群,CentOS(linux) 下Nginx的安装(Nginx+Tomcat集群第一步)

    CentOS(linux) 下Nginx的安装(Nginx+Tomcat集群) CentOS 7.4(腾讯云) pcre库 zlib库 openssl Nginx服务器 安装gcc g++开发类库 y ...

最新文章

  1. python替代_2.3.1 Python 实现的替代者
  2. jvm垃圾回收机制_干货|JVM垃圾回收机制
  3. Windows/Android/IOS平台如何在Unity3d播放RTSP/RTMP流
  4. Mysql内存表主从复制【译】
  5. mysql where 大小写_java – 使用select where where Mysql在Mysql中区分大小写
  6. 关于使用Tomcat服务器出现413错误的解决办法(Request Entity Too Large)
  7. php 3des 兼容java,java版3des加密程序,可与php兼容
  8. 海康威视+虹软人脸识别
  9. xmapp教程及扩展
  10. JQuery中美元符号$
  11. 刘宇凡:关于圈子的只言片语
  12. 使用uiautomatorviewer报错Error obtaining UI hierarchy
  13. linux纯文本无法键入密码,Apple Mac OS X FileVault纯文本密码本地安全限制绕过漏洞...
  14. 反编译exe软件_Winnti组织:利用ShadowPad和Winnti恶意软件针对高校发动攻击
  15. Win10设置系统补丁更新服务器,win10系统手动更新补丁如何设置 win10系统手动安装更新方法...
  16. Arduino-ESP8266库接口:Ticker.h
  17. rstp要点2:桥优先级为什么是4096的倍数?
  18. MyBatis源码简单分析
  19. 将汉字转化为拼音,正则表达式和得到汉字的Unicode编码
  20. JSR303介绍和使用

热门文章

  1. #瑞波#W底部启动,币须反弹一波!
  2. QGIS 下载慢解决:
  3. spss入门——简单的数据预处理到时间序列分析系列(二)
  4. 游戏开发中的物理介绍
  5. 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润
  6. 《与人沟通的技巧:聊天》学习总结
  7. 哈工大机器学习复习笔记(四)
  8. 基于Android studio的手机联系人信息获取
  9. flutter实现瀑布流布局
  10. [CF891E]Lust