Linux系统运维--Linux中Nginx 常用安装配置与问题解析
小职 2021-11-15 来源 : 阅读 1236 评论 0

摘要:本篇主要介绍了Linux系统运维--Linux中Nginx 常用安装配置与问题解析,通过具体的内容展现,希望对Linux的学习有一定的帮助。

本篇主要介绍了Linux系统运维--Linux中Nginx 常用安装配置与问题解析,通过具体的内容展现,希望对Linux的学习有一定的帮助。

Linux系统运维--Linux中Nginx 常用安装配置与问题解析

前言

系统环境: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 的协议上就可以了。


✅ 扫码免费获取基础课程·答疑解惑·职业测评

Linux系统运维--Linux中Nginx 常用安装配置与问题解析

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程