Nginx安装配置详解


Posted in Servers onJune 25, 2022

不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦。不过,我们往往只是需要一个静态 Server,或者一个反向代理 Server,这对 Nginx 来说小菜一碟。

Nginx安装配置详解

简介

Nginx 的安装:

# CentOS
yum install nginx;
# Ubuntu
sudo apt-get install nginx;
# Mac
brew install nginx;

一般可以在/etc/nginx/nginx.conf中配置,启动参数为:

# 启动
nginx -s start;
# 重新启动,热启动,修改配置重启不影响线上
nginx -s reload;
# 关闭
nginx -s stop;
# 修改配置后,可以通过下面的命令测试是否有语法错误
nginx -t;

-s,signal,意思就是向 nginx 发送start|reload|stop命令,还是很好理解的。先看一个最简单的nginx.conf配置:

events {
    # 需要保留这一个段落,可以为空
}
http {
    server {
        listen 127.0.0.1:8888;
        location / {
            root /home/chenya/test/;
        }
    }
}

启动后,访问htttp://127.0.0.1:8888,如果/home/chenya/test/下有index.html文件就会展示index.html的内容,否则返回404

Nginx 配置一个 Web 服务器

以下对配置 Web 服务器的参数做简单说明,包括如何配置端口、域名,如何处理请求,如何响应请求。

1、 虚拟主机和请求的分发

域名和端口的配置

listen 127.0.0.1:8000;
listen *:8000;
listen localhost:8000;
# IPV6
listen [::]:8000;
# other params
listen 443 default_serer ssl;
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024

主机名配置

server_name www.chenya.site  chenya.site
server_name *.chenya.com
server_name ~^\.chenya\.com$

URI 匹配

location = / {
    # 完全匹配  =
    # 大小写敏感 ~
    # 忽略大小写 ~*
}
location ^~ /images/ {
    # 前半部分匹配 ^~
    # 可以使用正则,如:
    # location ~* \.(gif|jpg|png)$ { }
}
location / {
    # 如果以上都未匹配,会进入这里
}

2、 文件路径的定义

根目录设置

location / {
    root /home/chenya/test/;
}

别名设置

location /blog {
    alias /home/chenya/www/blog/;
}
location ~ ^/blog/(\d+)/([\w-]+)$ {
    # /blog/20141202/article-name 
    # -> /blog/20141202-article-name.md
    alias /home/chenya/www/blog/$1-$2.md;
}

首页设置

index /html/index.html /php/index.php;

重定向页面设置

error_page    404         /404.html;
error_page    502  503    /50x.html;
error_page    404  =200   /1x1.gif;
location / {
    error_page  404 @fallback;
}
location @fallback {
    # 将请求反向代理到上游服务器处理
    proxy_pass http://localhost:9000;
}

try_files 设置

try_files $uri $uri.html $uri/index.html @other;
location @other {
    # 尝试寻找匹配 uri 的文件,失败了就会转到上游处理
    proxy_pass  http://localhost:9000;
}
location / {
    # 尝试寻找匹配 uri 的文件,没找到直接返回 502
    try_files $uri $uri.html =502;
}

Nginx 配置反向代理服务器

反向代理(reserve proxy)方式是指用代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络中的上游服务器,并将上游服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外的表现就是一个 Web 服务器。

Nginx 具备超强的高并发高负载能力,一般会作为前端的服务器直接向客户端提供静态文件服务;而业务一般还包含一些业务逻辑需要 Apache、Tomcat 等服务器来处理,故通常 Nginx 对外表现即为静态 Web 服务器也是反向代理服务器。

缺点是增加了一次请求的处理时间,优点是降低了上游服务器的负载,尽量将压力放在 Nginx 服务器上。

1、负载均衡配置

upstream,定义一个上游服务器集群

upstream backend {
    # ip_hash;
    server s1.chenya.com;
    server s2.chenya.com;
}
server {
    location / {
        proxy_pass http://backend;
    }
}

2、反向代理

proxy_pass 将请求转发到有处理能力的端上,默认不会转发请求中的 Host 头部

location /blog {
    prox_pass http://localhost:9000;
    ### 下面都是次要关注项
    proxy_set_header Host $host;
    proxy_method POST;
    # 指定不转发的头部字段
    proxy_hide_header Cache-Control;
    proxy_hide_header Other-Header;
    # 指定转发的头部字段
    proxy_pass_header Server-IP;
    proxy_pass_header Server-Name;
    # 是否转发包体
    proxy_pass_request_body on | off;
    # 是否转发头部
    proxy_pass_request_headers on | off;
    # 显形/隐形 URI,上游发生重定向时,Nginx 是否同步更改 uri
    proxy_redirect on | off;
}

一个简单的例子,Node.js

一个十分常见的需求:处理请求,如果是静态文件,Nginx 直接返回,否则交给 Node 服务器处理。首先创建了一个 Node 服务器:

const http = require('http');
http.createServer((req, res) => {
    res.end('hello world');
}).listen(9000);

任何请求过来都返回hello world,简版的 Nginx 配置如下,

events {
    # 这里可不写东西
    use epoll;
}
http {
    server {
        listen 127.0.0.1:8888;
        # 如果请求路径跟文件路径按照如下方式匹配找到了,直接返回
        try_files $uri $uri/index.html;
        location ~* ^/(js|css|image|font)/$ {
            # 静态资源都在 static 文件夹下
            root /home/chenya/www/static/;
        }
        location /app {
            # Node.js 在 9000 开了一个监听端口
            proxy_pass http://127.0.0.1:9000;
        }
        # 上面处理出错或者未找到的,返回对应状态码文件
        error_page    404            /404.html;
        error_page    502  503  504  /50x.html;
    }
}

首先 try_files,尝试直接匹配文件;没找到就匹配静态资源;还没找到就交给 Node 处理;否则就返回 4xx/5xx 的状态码。

测试语法

nginx -t

到此这篇关于Nginx安装配置的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Servers 相关文章推荐
Nginx访问日志及错误日志参数说明
Mar 31 Servers
Nginx已编译的nginx-添加新模块
Apr 01 Servers
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
Feb 12 Servers
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
Apr 02 Servers
阿里云 Windows server 2019 配置FTP
Apr 28 Servers
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
Apr 29 Servers
tomcat下部署jenkins的方法
May 06 Servers
Nginx HTTP跳转至HTTPS
May 15 Servers
Nginx静态压缩和代码压缩提高访问速度详解
May 30 Servers
详解ZABBIX监控ESXI主机的问题
Jun 21 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
Apache自带的ab压力测试工具的实现
Jul 23 Servers
win sever 2022如何占用操作主机角色
Jun 25 #Servers
Docker与K8s关系介绍不会Docker也可以使用K8s
Windows Server 修改远程桌面端口的实现
Windows server 2012 NTP时间同步的实现
windows server 2016 域环境搭建的方法步骤(图文)
Windows server 2022创建创建林、域树、子域的步骤
Windows Server 2022 超融合部署(图文教程)
You might like
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
PHP实现多进程并行操作的详解(可做守护进程)
2013/06/18 PHP
Linux编译升级php的详细方法
2013/11/04 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
取得传值的函数
2006/10/27 Javascript
使用js+jquery实现无限极联动
2013/05/23 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
javascript+css3 实现动态按钮菜单特效
2016/02/06 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
让mocha支持ES6模块的方法实现
2020/01/14 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
基于Python的接口测试框架实例
2016/11/04 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
如何打开WebSphere远程debug
2014/10/10 面试题
信息管理专业学生自荐信格式
2013/09/22 职场文书
大学军训感言400字
2014/03/11 职场文书
竞选村长演讲稿
2014/04/28 职场文书
2014年平安夜寄语
2014/12/08 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
Mysql基础之常见函数
2021/04/22 MySQL
css display table 自适应高度、宽度问题的解决
2021/05/07 HTML / CSS