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的rewrite模块详解
Mar 31 Servers
Nginx服务器如何设置url链接
Mar 31 Servers
Nginx本地目录映射实现代码实例
Mar 31 Servers
Nginx已编译的nginx-添加新模块
Apr 01 Servers
nginx反向代理配置去除前缀案例教程
Jul 26 Servers
Windows Server 2012 修改远程默认端口3389的方法
Apr 28 Servers
linux目录管理方法介绍
Jun 01 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
Jun 25 Servers
Docker安装MySql8并远程访问的实现
Jul 07 Servers
Linux在两个服务器直接传文件的操作方法
Aug 05 Servers
Windows Server 2016服务器用户管理及远程授权图文教程
Aug 14 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创建动态图像
2006/10/09 PHP
PHP 防注入函数(格式化数据)
2011/08/08 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
Laravel find in set排序实例
2019/10/09 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
jquery 输入框数字限制插件
2009/11/10 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
解读Django框架中的低层次缓存API
2015/07/24 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
keras.layer.input()用法说明
2020/06/16 Python
如何把python项目部署到linux服务器
2020/08/26 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
民主生活会发言材料
2014/10/20 职场文书
实习科室评语
2015/01/04 职场文书
电影圆明园观后感
2015/06/03 职场文书
创业计划书之花店
2019/09/20 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
Python竟然能剪辑视频
2021/05/25 Python