图灵学院java架构之路-VIP(五)nginx的安装和基本配置

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

一,安装环境准备:

1.linux 内核2.6及以上版本:使用uname -a查看即可。

2.GCC编辑器。

GCC可以用来编译C语言程序。Nginx没有直接提供二级制可执行程序,只能下载源码进行编译。

3.PCRE库。

PCRE是为了让Nginx支持正则表达式。

4.zlib库

zlib库用于HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型的HTTP响应使用gzip来进行压缩,以减少网络传输量。

5.OpenSSL开发库

如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5,SHA1等散列函数,那么也需要安装OpenSSL库。

安装命令:

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel

二,开始编译与安装:

1.Nginx下载地址:http://nginx.org/en/download.html

直接去官网下载文件也可以,或者Linux直接输入 wget http://nginx.org/download/nginx-1.14.0.tar.gz

2.解压tar -zxvf nginx-1.14.0.tar.gz

3.默认安装(不采用任何模块)

./configure 等待执行结束以后,默认会安装在/usr/local/nginx下。

也可以添加模块。例如:

# 添加状态查查看模块

./configure --with-http_stub_status_module

4.启动

我们切换到默认安装文件夹下查看一下文件。大概是这个样子的。

我们输入./sbin/nginx 也就启动我们的ngxin了

#查看命令帮助

./sbin/nginx -?

#默认方式启动:

./sbin/nginx

#指定配置文件启动

./sbing/nginx -c /tmp/nginx.conf

#指定nginx程序目录启动

./sbin/nginx -p /usr/local/nginx/

地址栏输入我们的IP,就可以访问Nginx了,默认监听80端口。

5.帮助命令

当我们输入./sbin/nginx -h我们会看到如下所示

-?,-h查看帮助文档。

-v(小写) 查看版本信息

-V(大写)查看详细版本信息,带插件信息

-t (小写)检查配置文件是否正确

-T (大写)检查配置文件是否正确,并且查看一下。

-q 监听ngxin是否可以正常使用,以及查看端口。

-s 发送指令 比如-s stop停止服务。 -s quit 处理完当前的任务就停止服务 -s reopen 重新加载配置文件(比如日志文件绑定句柄的行为)。-s reload(重现记载配置,相当于重新启动)

-p 设置前缀路径

-c 指定配置文件启动

-g 给予参数启动,例如./sbin/nginx -g "user root;"以root用户启动。

在刚才的解压目录下输入 ./configure --help 也会得到帮助命令。这个是编译过程的命令。太多了,没法一个个说,有的还几乎不用。可以去官网自己查看,地址http://nginx.org/en/docs/configure.html

说两个命令比较常用的。

./configure --prefix=path 指定你的安装路径,不然会默认安装在/usr/src/nginx下。

./configure --user=name 指定用户启动,设置非特权用户的名称,其凭据将由工作进程使用。安装后,可以nginx.conf使用user指令在配置文件中 更改名称 。默认用户名是nobody。如不设置,可能造成日志文件无法使用的情况发生

三,Nginx架构说明

我们在控制台输入ps -ef|grep nginx,这时我们会看到

他包含了两个进程,一个是master,一个是worker,master是核心管理进程,worker是实际工作的进程,一般来说一个worker运行在一个CPU的一个核上。如果我们是4核CPU,那么我们建议将worker进程配置成小于等于4的。

简单说一下nginx为啥快,用到了NIO为啥就快。

nginx接收到请求,会告知CPU,我们要得到什么数据,需要从硬盘哪个位置得到数据。但是它告知完事以后它就走了,不在原地等待数据的返回,返回后继续处理接收到的请求。nginx会保留一个实时查看哪些请求处理完成了,处理完成了就会返回到客户端。(粗略的说一下,后面会详细的说)

四,Nginx简单配置(正向代理)

我们的配置都存在/usr/local/nginx/conf/nginx.conf下,我们来看一下都是做什么的。

第一行,箭头所指位置就是我们的工作线程数,默认是1

事件模块,内部默认设置的是最大连接数1024。

http是最常用的配置。我们来详细说明一下。这里只说简单的配置,高级配置在优化Nginx再说。

http只能存在一个

sendfile 内核态是否到用户态的一个开关

keepalive_timeout 闲置连接最大超时时间。

server配置一个具体的站点,可以设置多个。

listen监听的端口号

server_name 监听的域名名称,可以使用通配符,可以配置多个,用空格分开。

匹配原则,优先最大匹配原则,左边匹配大于右边匹配,匹配完全一致上面的优先。

location 站点具体访问地址路径

root 路径,相对nginx设置的。

index页面文件名称。可以写多个用空格分开

现在我们将配置文件修改为

则你输入http://localhost/hello时,我们会访问的是nginx下的/www/hello目录,ngxin会默认把location的地址带过来。

我们可以这样来配置,就不再携带hello会直接访问nginx下的/www目录

location的配置语法为location 符号 url

符号包含 /基础url目录匹配

= 完全匹配

~ 验证大小写的URI匹配(正则)

~*忽略大写的URI匹配(正则)

^~只需要验证前半部分的URI参数(正则)

匹配优先规则:

1.精确匹配最高优先

2.正则匹配优先于^~匹配

3.前缀最大匹配优先

4.配置有上到下,相同匹配,上面的优先于下面的。

基于正则的动静分离样例:

location ~* \.(gif|jpg|png|css|js)$ {

root /usr/www/static;

}

防盗链配置演示:

# 加入至指定location 即可实现

valid_referers none blocked 域名;

if ($invalid_referer) {

return 403;

}

下载限速

location /download {

limit_rate 1m; //限制每秒的下载速度 1M/S

limit_rate_after 30m; // 超过30M之后的文件下载限速(限制文件大小)

}

创建IP黑名单

#封禁指定IP 加入至指定location 即可实现

deny 192.168.0.1;

allow 192.168.0.1;

#开放指定IP 段

allow 192.168.0.0/24;

#封禁所有

deny all;

#开放所有

allow all;

# 创建黑名单文件

echo ‘deny 192.168.0.132;‘ >> balck.ip

#http 配置块中引入 黑名单文件

include       black.ip;

原文地址:https://www.cnblogs.com/cxiaocai/p/11432243.html

时间: 2024-10-07 05:06:45

图灵学院java架构之路-VIP(五)nginx的安装和基本配置的相关文章

图灵学院java架构师vip

caier-20 我们一起努力,一起学习,加油! caier-20 微云学习地址:https://share.weiyun.com/5mokPqU 网盘学习地址:https://pan.baidu.com/s/1CTx5SqUeM-ZKtDYLeovODQ 提取码:iclq 致学者:不论你在什么时候开始,重要的是开始之后请不要停止. ava Memory Model,简称JMM,把它抽象成一种规范,用工作内存与主内存这两个概念.在JMM中主内存属于共享数据区域,从某个程度上讲应该包括了堆和方法区

图灵学院Java架构师-VIP-并发编程(AQS详解)

1.LockSupport LockSupport类的核心方法其实就两个:park()和unark(),其中park()方法用来阻塞当前调用线程,unpark()方法用于唤醒指定线程 LockSupport类使用了一种名为Permit(许可)的概念来做到阻塞和唤醒线程的功能,可以把许可看成是一种(0,1)信号量(Semaphore),但与 Semaphore 不同的是,许可的累加上限是1. 初始时,permit为0,当调用unpark()方法时,线程的permit加1,当调用park()方法时,

java架构之路-(Redis专题)SpringBoot连接Redis超简单

上次我们搭建了Redis的主从架构,哨兵架构以及我们的集群架构,但是我们一直还未投入到实战中去,这次我们用jedis和springboot两种方式来操作一下我们的redis 主从架构 如何配置我上次已经讲过了,https://www.cnblogs.com/cxiaocai/p/11711377.html.我们这次主要看如何用java来操作redis,先来复习一下上次的配置,准备三台服务器,安装redis,保证互通,两台改为slave,配置replicaof IP 端口,主从复制是通过rdb文件

架构之路(五):忘记数据库

前面写了这么多,很大程度上就是为了这一章做准备.面向对象或者领域驱动,最重要的一点就是要忘记数据库!我花了很长很长的时间,才理解了这一点,从而真正的迈向一个崭新的天地:而后,我又花了很长很长的时间,才勉强做到这一点:我希望,有一天,这将不再是一个问题,我不需要考虑这一点…… 为什么业务层这么薄 三层架构流行起来之后,我们很清楚的知道UI层负责页面交互并调用下一层,也知道DAL层就是和数据库打交道.但BLL层?什么才算是“业务逻辑”?有各种各样的解释,但这些不都是sql做的么?对于绝大多数的应用系

java架构之路-(面试篇)JVM虚拟机面试大全

下文连接比较多啊,都是我过整理的博客,很多答案都在博客里有详细说明,理解记忆是最扎实的记忆.而且我的答案不一定是最准确的,但是我的答案不会让你失望,而且几乎每个答案都是问题的扩展答案. 1.JVM内存模型 答:https://www.cnblogs.com/cxiaocai/p/11483629.html 先经过类装载子系统装载,经由验证,准备,解析,初始化四个过程.方法被调用,方法进栈,对象放在堆,栈内存的引用指向我们的对象,方法逐行执行,由我们的程序计数器来控制.元空间放置静态方法,不占用j

Java学习之路(五)--Thinking in Java

写程序要细心,遇到bug要善于排查. 今天在用Java写几个小程序的时候,由于极力追求优化与功效,忽视了一个小小的细节问题.但最终找到了bug并且解决了它. 我们都知道,在使用for循环的时候,比如: for(int i = 0; i < n; i++){...} 我们一般都这儿写.但是仅仅这样是不够的,因为这段语句还可以进行优化.比如i<n,就不如直接判断i!=n,这样在计算机内部可以节省运算时间.还有,i++还可以改写成++i,因为i++需要计算机保存i之前的值之后再+1,++i直接让i+

java架构之路-(MQ专题)RabbitMQ安装和基本使用

RabbitMQ安装 我这里安装是使用阿里云的CentOS7.5来安装的,使用CentOS版本低于7的可能会报错. 1.安装rabbitmq所需要的依赖包 输入$ yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc- c++ kernel-devel m4 ncurses-devel tk tc xz 2.下载安装包 $ wget www.rabbitmq.com/relea

java架构之路(多线程)大厂方式手写单例模式

上期回顾: 上次博客我们说了我们的volatile关键字,我们知道volatile可以保证我们变量被修改马上刷回主存,并且可以有效的防止指令重排序,思想就是加了我们的内存屏障,再后面的多线程博客里还有说到很多的屏障问题. volatile虽然好用,但是别用的太多,咱们就这样想啊,一个被volatile修饰的变量持续性的在修改,每次修改都要及时的刷回主内存,我们讲JMM时,我们的CPU和主内存之间是通过总线来连接的,也就是说,每次我们的volatile变量改变了以后都需要经过总线,“道路就那么宽,

java架构之路(多线程)AQS之ReetrantLock显示锁的使用和底层源码解读

锁的粗化和锁的消除 这个本来应该是在synchronized里面去说的,忘记了,不是很重要,但是需要知道有这么一个东西啦. 我们先来演示一下锁的粗化: StringBuffer sb = new StringBuffer(); public void lockCoarseningMethod(){ //jvm的优化,锁的粗化 sb.append("1"); sb.append("2"); sb.append("3"); sb.append(&qu