热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx入门到实战,新手必懂!

一、环境服务器版本:CentOS7.2,为了保证学习阶段不遇到奇怪的事情,请保证以下四点(大神选择性无视)确认

一、环境

服务器版本:CentOS 7.2,为了保证学习阶段不遇到奇怪的事情,请保证以下四点(大神选择性无视)

  1. 确认系统网络

  2. 确认yum可用

  3. 确认关闭iptables

  4. 确认停用selinux

#查看iptables状态
systemctl status firewalld.service
#关闭防火墙(临时关闭)
systemctl stop firewalld.service
#查看SELinux状态
getenforce
#临时关闭SELinux
setenforce 0

安装一些系统基本工具,正常情况系统都会自带(没有在装哦)

yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim

二、Nginx是什么?

Nginx是一个开源且高性能、可靠的HTTP中间件、代理服务 其他的HTTP服务:

  1. HTTPD-Apache基金会

  2. IIS-微软

  3. GWS-Google(不对外开放)

近几年,Nginx的市场占有率越来越高,一度飙升,为什么呢?接下来我们就知道了!三、我们为什么选择Nginx?

1. IO多路复用epoll(IO复用)

如何理解呢?举个例子吧!有A、B、C三个老师,他们都遇到一个难题,要帮助一个班级的学生解决课堂作业。

老师A采用从第一排开始一个学生一个学生轮流解答的方式去回答问题,老师A浪费了很多时间,并且有的学生作业还没有完成呢,老师就来了,反反复复效率极慢。

老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个自己同一时间去帮好几个同学回答问题,最后还没回答完,老师B消耗光了能量累倒了。

老师C比较精明,他告诉学生,谁完成了作业举手,有举手的同学他才去指导问题,他让学生主动发声,分开了“并发”。这个老师C就是Nginx。

2. 轻量级

  • 功能模块少 - Nginx仅保留了HTTP需要的模块,其他都用插件的方式,后天添加

  • 代码模块化 - 更适合二次开发,如阿里巴巴Tengine

3. CPU亲和

把CPU核心和Nginx工作进程绑定,把每个worker进程固定在一个CPU上执行,减少切换CPU的cache miss,从而提高性能。

三、安装与目录

本人使用了鸟哥的lnmp集成包,简单方便-推荐!

#执行这句语句,根据指引,将安装 nginx php mysql 可进入lnmp官网查看更详细的过程
#默认安装目录/usr/local
wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./install.sh lnmp#默认安装目录
/usr/local

四、基本配置

#打开主配置文件,若你是用lnmp环境安装
vim /usr/local/nginx/conf/nginx.conf----------------------------------------user #设置nginx服务的系统使用用户
worker_processes #工作进程数 一般情况与CPU核数保持一致
error_log #nginx的错误日志
pid #nginx启动时的pidevents {worker_connections    #每个进程允许最大连接数use #nginx使用的内核模型
}

我们使用 nginx 的 http 服务,在配置文件 nginx.conf 中的 http 区域,配置无数个 server ,每一个 server 对应这一个虚拟主机或者域名

http {... ... #后面再详细介绍 http 配置项目server {listen 80 #监听端口;server_name localhost #地址location / { #访问首页路径root /xxx/xxx/index.html #默认目录index index.html index.htm #默认文件 } error_page 500 504 /50x.html #当出现以上状态码时从新定义到50x.html location = /50x.html { #当访问50x.html时root /xxx/xxx/html #50x.html 页面所在位置} }server {... ... }
}

一个 server 可以出现多个 location ,我们对不同的访问路径进行不同情况的配置 我们再来看看 http 的配置详情

http {sendfile  on                  #高效传输文件的模式 一定要开启keepalive_timeout 65        #客户端服务端请求超时时间log_format main XXX #定义日志格式 代号为mainaccess_log /usr/local/access.log main #日志保存地址 格式代码 main
}

四、模块

查看 nginx 已开启和编联进去的模块,模块太多了,就不在这长篇大论,有需要自行百度吧~

#大写V查看所有模块,小写v查看版本
nginx -V
# 查看此配置文件 是否存在语法错误
nginx -tc /usr/local/nginx/conf/nginx.conf

五、静态资源 Web 服务

1. 静态资源类型

非服务器动态运行生成的文件,换句话说,就是可以直接在服务器上找到对应文件的请求

1. 浏览器端渲染:HTML,CSS,JS

2. 图片:JPEG,GIF,PNG

3. 视频:FLV,MPEG

4. 文件:TXT,任意下载文件

2. 静态资源服务场景-CDN

什么是CDN?例如一个北京用户要请求一个文件,而文件放在的新疆的资源存储中心,如果直接请求新疆距离太远,延迟久。使用nginx静态资源回源,分发给北京的资源存储中心,让用户请求的动态定位到北京的资源存储中心请求,实现传输延迟的最小化

2. nginx静态资源配置

配置域:http、server、location

http { sendfile   on;
}http { sendfile   on;tcp_nopush on;
}http { sendfile   on;tcp_nopush on;tcp_nodelay on;
}location ~ .*\.(gif|jpg)$ { gzip on; gzip_http_version 1.1; gzip_comp_level 2; gzip_types   text/plain application/Javascript application/x-Javascript text/Javascript text/css application/xml application/xml+rss image/jpeg image/gif image/png; root /opt/app/code;
}location ~ load^/download { gzip_static on tcp_nopush on;root /opt/app/code;
}

六、浏览器缓存

HTTP协议定义的缓存机制(如:Expires; Cache-control等 ),减少服务端的消耗,降低延迟

1. 浏览器无缓存

浏览器请求 -> 无缓存 -> 请求WEB服务器 -> 请求相应 -> 呈现

呈现阶段会根据缓存的设置在浏览器中生成缓存

2. 浏览器有缓存

浏览器请求 -> 有缓存 -> 校验本地缓存时间是否过期 -> 没有过期 -> 呈现

若过期从新请求WEB服务器

3. 语法配置

location ~ .*\.(html|htm)$ { expires 12h;
}

服务器响应静态文件时,请求头信息会带上 etag 和 last_modified_since 2个标签值,浏览器下次去请求时,头信息发送这两个标签,服务器检测文件有没有发生变化,如无,直接头信息返 etag 和last_modified_since,状态码为 304 ,浏览器知道内容无改变,于是直接调用本地缓存,这个过程也请求了服务,但是传着的内容极少。

七、跨站访问

开发 nginx 跨站访问设置

location ~ .*\.(html|htm)$ { add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;#Access-Control-Allow-Credentials true #允许COOKIE跨域
}

在响应中指定 Access-Control-Allow-Credentials 为 true 时,Access-Control-Allow-Origin 不能指定为 *,需要指定到具体域名。

相关跨域内容可参考 Laravel 跨域功能中间件 使用代码实现跨域,原理与nginx跨域配置相同

八、防盗链

防止服务器内的静态资源被其他网站所套用,此处介绍的 nginx 防盗链为基础方式,其它更加深入的方式将在之后的文章介绍

首先,需要理解一个nginx变量

$http_referer #表示当前请求上一次页面访问的地址,换句话说,访问 www.baidu.com 主页,这是第一次访问,所以 $http_referer 为空,但是 访问此页面的时候还需要获取一张首页图片,再请求这张图片的时候 $http_referer 就为 www.baidu.com。

然后配置

location ~ .*\.(jpg|gif)$ { valid_referers none blocked 127.xxx.xxx.xxif ($invalid_referer) { return 403;}
}

九、HTTP代理服务

Nginx可以实现多种代理方式

  • HTTP

  • ICMPPOPIMAP

  • HTTPS

  • RTMP

1. 代理区别

区别在于代理的对象不一样,正向代理代理的对象是客户端,反向代理代理的对象是服务端

2. 反向代理

语法:proxy_pass URL
默认:——
位置:loactionserver {listen 80;location / {proxy_pass http://127.0.0.1:8080/;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30; proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffer_size 32k;proxy_buffering on; proxy_buffers 4 128k;proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k; }
}
本文介绍了 Nginx 相关配置和场景,后面文章会介绍负载均衡和缓存服务相关知识。

来源:https://segmentfault.com/a/1190000014893012


PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。

 关注公众号:Java后端编程,回复下面关键字 

要Java学习完整路线,回复  路线 

缺Java入门视频,回复: 视频 

要Java面试经验,回复  面试 

缺Java项目,回复: 项目 

进Java粉丝群: 加群 

PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。

(完)

加我"微信" 获取一份 最新Java面试题资料

c8da5b50905844d80ea26ba17a97ab11.png

请备注:666,不然不通过~

最近好文

1、Kafka 3.0重磅发布,弃用 Java 8 的支持!

2、你只会用 ! = null 判空?嘿嘿!

3、这次,Swagger-ui遇到对手了!

4、上午写了一段代码,下午就被开除了...

5、抖音项目Semi Design涉嫌抄袭?技术团队发文致歉!

7f588f94847c2106bc9967c2cdfbd2c5.png

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:关注公众号并回复 java 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ♡


推荐阅读
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • MySQL5.6.40在CentOS764下安装过程 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • centos6.8 下nginx1.10 安装 ... [详细]
  • linux下编译安装lnmp
    2019独角兽企业重金招聘Python工程师标准#######################安装依赖#####################安装必要的包:y ... [详细]
  • golang源码分析调度概述
    golang源码分析-调度过程概述本文主要概述一下golang的调度器的大概工作的流程,众所周知golang是基于用户态的协程的调度来完成多任务的执行。在Linux ... [详细]
  • VS用c语言连接mysql,c语言连接mysql完整演示
    #include#includeintmain(){MYSQL*conn;创建一个指向mysql数据类型的指针connmysql_init(NULL);mysql的初始化if(!c ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
author-avatar
林老悲--
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有