摘要:本篇主要介绍了Linux系统运维--Linux中Nginx 常用安装配置与问题解析,通过具体的内容展现,希望对Linux的学习有一定的帮助。
本篇主要介绍了Linux系统运维--Linux中Nginx 常用安装配置与问题解析,通过具体的内容展现,希望对Linux的学习有一定的帮助。
前言
系统环境:Centos8.0+
Nginx 版本:1.20 (本篇文章无新特性,理论支持所有版本,可自行测试)
安装
以Centos8.0+ 为例,可直接使用dnf -y install nginx 安装nginx 服务。
默认使用systemctl 命令管理nginx 服务打开关闭。
官网也提供了很多的方式进行安装,如windows 系统可直接下载后执行,linux 类系统可能需要执行make 命令进行安装,具体安装方式可自行查阅。
----官网下载地址
命令列表:
systemctl 为Centos 系统中的服务管理工具,其他系统另行处理
指定配置文件启动:nginx -c /**/nginx.conf
服务启动:systemctl start nginx 或nginx
服务重启:systemctl restart nginx 或nginx -s reload
配置检查:nginx -t
服务停止:systemctl stop nginx 或直接使用ps 命令查找进程pid 然后kill 掉。
配置server
配置一览
# 负载均衡
upstream my-service {
server 127.0.0.1:12000;
server 127.0.0.1:13000;
}
# http 配置
server
{
# 监听端口号
listen 80;
# 监听域名
server_name domain.com domain2.com;
# 字节编码
charset utf-8;
# 日志输出
access_log /var/log/nginx_access.log;
# 意为request body 中的最大数据量可以传输多少
# 如果超过此大小会直接驳回请求返回错误代码
client_max_body_size 100M;
# gzip 配置
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
# 声明我要开启gzip 的资源请求,这边配置了js 文件与 css 文件的gzip 压缩
gzip_types application/javascript text/css;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
# 配置local 信息
location /
{
add_header Cache-Control no-store;
try_files $uri $uri/ /index.html;
root /home/www/;
index index.html;
}
# 配置后端api 转发
location /api
{
proxy_pass //my-service/api;
proxy_set_header X-Address $remote_addr;
proxy_set_header Host $http_host;
}
# websocket 配置
location /so
{
proxy_pass //127.0.0.1:15000/so;
proxy_read_timeout 4h;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 静态资源映射
location ^~ /resource/
{
alias /data/resource/;
autoindex on;
}
}
# https 配置
server
{
listen 443 ssl;
server_name domain.com domain2.com;
charset utf-8;
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
gzip_types application/javascript text/css;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
ssl_certificate /**/server.crt;
ssl_certificate_key /**/server.key;
location /api
{
proxy_pass //my-service/api;
}
}
负载均衡
upstream my-service {
server 127.0.0.1:12000;
server 127.0.0.1:13000;
}
该配置意为配置两个服务,然后通过轮询的方式进行负载均衡转发访问。
对于upstream 命令,还有一下几种模式
轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。
upstream my-service {
server 127.0.0.1:12000;
server 127.0.0.1:13000;
}
权重
增加权重意指代访问的服务权重比,权重值高转发的次数就会越多
upstream my-service {
server 127.0.0.1:12000 weight=1;
server 127.0.0.1:13000 weight=2;
}
ip_hash
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
upstream my-service {
ip_hash;
server 127.0.0.1:12000;
server 127.0.0.1:13000;
}
fair
转发的每个请求会按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个请求会固定访问一个后端服务,可以解决session一致性的问题。
upstream my-service {
server 127.0.0.1:12000;
server 127.0.0.1:13000;
fair;
}
url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。
upstream my-service {
server 127.0.0.1:12000;
server 127.0.0.1:13000;
hash $request_uri;
hash_method crc32;
}
其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。
server 配置
大部分来讲server 配置中必需包含以下几种配置
server
{
# 监听端口号
listen 80;
# 监听域名
server_name domain.com domain2.com;
location /
{
[other config]
}
}
对于一个server 来讲,重要的就是listen 和server_name 参数,他们标注了此部分配置监听的端口号与监听的域名。
不同的server 支持监听同一端口不同域名,当有请求访问访问他们相同端口的时候,则会根据域名来区分匹配的server 配置进行转发。
server_name 是可以配置多个的,中间用空格隔开
location 配置
vue 等单页面路由项目配置
# 配置local 信息
location /
{
add_header Cache-Control no-store;
try_files $uri $uri/ /index.html;
root /home/www/;
index index.html;
}
add_header *** ***:命令的主要作用是为此次request 添加一个指定head 信息。
Cache-Control 为Http 协议中的head,意指此次请求是否缓存,no-store 为不缓存请求内容。
try_files:这不是一个很好理解的命令,意图在于省略rewrite 指令来指定此次请求所访问的一个地址。
比如此次请求的地址为
//domain.com/res?userId=1
$uri 指令则代表访问的路径为/res
$request_uri指令则代表访问的路径为/res?userId=1
当我使用这样的配置时,访问//domain.com 时,就可以跳转到/home/www/index.html 文件下,浏览器会加载index.html 文件中的js 与css 文件,当路由模式为history 或hash 模式时,具体的路由跳转和逻辑处理,都会交给网站的vue router 去管理,所以就可以实现单路由页面跳转,如果没有try_files 的命令,nginx 会将请求完成的转发至root 命令所配置的文件目录下。
即当访问的路径为//domain.com/user/index.html 时,
则会转发到/home/www/user/index.html 文件下,将该文件返回。
后端服务接口转发
# 配置后端api 转发
location /api
{
proxy_pass //my-service/api;
proxy_set_header X-Address $remote_addr;
proxy_set_header Host $http_host;
}
该配置意为配置以/api 开头的请求,通过定义的负载均衡my-service 进行转发请求。
如果不需要使用负载均衡,也可以直接配置为//127.0.0.1:12000/api。
proxy_set_header:指令意在设置一个自定义的请求头,X-Address 则是自定义的请求头,将会添加到此次转发的header 中,$remote_addr 是指获取上一级代理的IP,如有其他获取ip 的要求可以自行百度处理。
WebSocket 转发
# websocket 配置
location /so
{
proxy_pass //127.0.0.1:15000/so;
proxy_read_timeout 4h;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
简单的说一下比较重点的配置
proxy_read_timeout:配置此次请求链接的时间,4h 为四个小时后就会端口。
proxy_http_version:使用websocket 需要将http 设置成1.1 版本,因为默认nginx 的http 协议版本那是1.0,不支持websocket 功能
Upgrade $http_upgrade:保持默认
Connection "upgrade":保持默认
proxy_redirect: 使用websocket 需要关闭代理重定向
静态资源映射配置
很多时候我们需要将服务器的一个目录定义为资源目录,通过nginx 进行请求转发去访问。
# 静态资源映射
location ^~ /resource/
{
alias /data/resource/;
autoindex on;
}
alias:设置一个可访问的路径。
autoindex:该命令设置为on 时,会开启文件目录访问功能,可以直接在web 浏览器中显示出目录中的所有文件信息。
https 配置
server
{
listen 443 ssl;
server_name domain.com domain2.com;
charset utf-8;
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
gzip_types application/javascript text/css;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
ssl_certificate /**/server.crt;
ssl_certificate_key /**/server.key;
location /api
{
proxy_pass //my-service/api;
}
}
对于配置https 来讲,与http 协议的区别就是需要配置ssl_certificate与ssl_certificate_key 密钥证书和密钥key。
这两个证书文件是可以自己生成的,也可以使用浏览器信任的机构生成的证书,自己生成的ssl 证书是不会被浏览器认可的,会有异常的提示,而使用机构申请的证书则会正常显示。
自己可以使用openssl 等工具进行ssl 证书的生成。
如果浏览的链接不是需要显示在浏览器页面中的,是可以使用自己生成的ssl 证书进行https 协议的配置,
配置http 协议自动上升跳转https 协议请求
对于协议自动上升的问题,可以配置http 请求的rewrite
server {
listen 80;
server_name localhost;(域名)
rewrite ^(.*)$ https://$host$1 permanent;
}
将http 请求重写到https 的协议上就可以了。
✅ 扫码免费获取基础课程·答疑解惑·职业测评
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号