Nginx的简单使用
一、Nginx概述
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。它的特点是支持高并发;资源消耗少;可以做HTTP反向代理和负载均衡;支持异步网络i/o事件模型epoll。
(一)Nginx目录文件
[root@bogon nginx1-12]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
下面列出几个比较重要的目录功能:
- conf 存放nginx所有配置文件的目录,主要nginx.conf
- html 存放nginx默认站点的目录,如index.html、error.html等
- logs 存放nginx默认日志的目录,如error.log access.log
- sbin 存放nginx主命令的目录,sbin/nginx
Nginx主配置文件nginx.conf解析:
#定义Nginx运行的用户
#user nobody; #Nginx进程数,一般为CPU的核数
worker_processes 1; #全局错误日志定义类型
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #进程pid文件
#pid logs/nginx.pid; #事件模型,配置耽搁进程最大连接数
events {
worker_connections 1024;
} #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #文件扩展名与文件类型映射表
include mime.types; #默认文件类型
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。
如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。
sendfile on;
#tcp_nopush on; #超时时间
#keepalive_timeout 0;
keepalive_timeout 65; #开启gzip压缩输出
#gzip on; #虚拟主机的配置
server {
#监听端口
listen 80; #域名可以有多个,用空格隔开
server_name localhost; #charset koi8-r; #定义本虚拟主机的访问日志
#access_log logs/host.access.log main; #控制网站访问路径
location / {
root html; #存放网站代码路径
index index.html index.htm; #服务器返回的默认页面文件
}
# 指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton
#error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
} #启用反向代理
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
} #第二个虚拟主机配置
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost; # ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} }
(二)部署访问站点
这里是nginx已经安装完成了,接着就是启动nginx,进入安装目录的sbin目录下:
[root@bogon nginx1-12]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@bogon nginx1-12]# cd sbin/ #进入sbin目录
[root@bogon sbin]# ls
nginx
[root@bogon sbin]# ./nginx #启动nginx
[root@bogon sbin]# ./nginx -s stop #关闭nginx
[root@bogon sbin]# ./nginx -s reload #重新加载
启动完毕后,可以进行检测是否启动成功:
[root@bogon ~]# netstat -tunlp |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3796/nginx: master
[root@bogon ~]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.12.0
Date: Thu, 17 Oct 2019 04:03:18 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Jun 2019 09:48:32 GMT
Connection: keep-alive
ETag: "5cf63e70-264"
Accept-Ranges: bytes
显然,已经启动成功,并且可以正常访问。
(二)基于域名的多虚拟主机实战
如果一台linux服务器只运行了一个小网站并且网站的流量小,这样站长可能会承担高额的服务器租赁费以及造成了硬件资源的浪费。为了解决这个问题引入了虚拟主机
虚拟主机(英语:virtual hosting)或称 共享主机(shared web hosting),又称虚拟服务器,是一种在单一主机或主机群上,实现多网域服务的方法,可以运行多个网站或服务的技术。
其实虚拟主机就是将一台服务器分割成多个“虚拟服务器”,每个站点使用各自的硬盘空间,由于省资源,省钱,众多网站都使用虚拟主机来部署网站。
Nginx支持多虚拟机的操作,在nginx.conf中使用server{}代码块标签来表示一个虚拟主机。Nginx支持多个server{}标签,即支持多个虚拟主机站点。
http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; #gzip on;
#第一个虚拟主机
server {
listen 80;
# server_name localhost;
server_name www.nginxhs1.com;
#charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #第二个虚拟主机
server {
listen 80;
# server_name localhost;
server_name www.nginxhs2.com;
#charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
... }
每一个server{}就是一个虚拟主机,在内部可以配置站点信息,其中server_name名称需要自己在本地的hosts文件中进行ip与域名的映射,windows(位于C:\Windows\System32\drivers\etc)中进行设置:
127.0.0.1 localhost 192.168.0.104 www.yw.com #linux系统上的ip 192.168.0.104 www.nginxhs.com
二、主要功能
(一)反向代理
正向代理:是针对客户端来讲的,比如一个网址客户端是访问不了,但是可以访问代理服务器,然后代理服务器替代我们去访问原始服务器拿到资源再返回给我们。所以正向代理就是位于客户端与原始服务器之间的服务器,去代替我们访问一些我们访问不了的服务器。
反向代理:是针对服务器来讲的,用于接收客户端的请求,并且将请求再转发给具体的服务器进行处理请求,然后再将服务器的响应结果反馈给客户端。
比如在linux系统上部署nginx+uwsgi+django项目,此时需要nginx反向代理进行转发,nginx接收到http请求后将其转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi 根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,uwsgi接收wsgi 发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
所以在nginx.conf中就需要进行配置反向代理:
可以看到反向代理使用的是uwsgi_pass参数而非proxy_pass参数,proxy_pass配置走的是http协议,uwsgi_pass未指出协议走的是socket,这样就完成了请求到达nginx的80端口后转发给后面django程序启动的8000端口。
(二)负载均衡
多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。
Nginx可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
#定义负载均衡池,名字叫做yw,池子中写入uwsgi发布yw的socket地址
upstream yw{
server 0.0.0.0:8000 weight=10; #根据权重大小轮询转发到此处
}
server {
listen 80;
server_name www.yw.com;
#访问nginx的根路径时,转发请求给uwsgi的8000端口,这里要和uwsgi.ini写的一致
location / {
include /root/Env/yw_crm_project/nginx/conf/uwsgi_params; #这里是导入的uwsgi配置
uwsgi_pass yw; #请求转发给upstream地址池里的uwsgi程序,yw就是负载均衡池的名字 }
location /static/ {
alias /root/Envs/yw_crm_project/nginx/static/; #处理静态页面资源
}
}
}
定义了负载均衡池yw,内部放着很多的主机(服务器),nginx根据uwsgi_pass参数进行转发给负载均衡池中的某个服务器,而服务器的选择是根据nginx默认的轮询进行的,当然你可以对每一个服务器设置权重,这样被轮询到的概率就会增大。
另外,可以看到nginx进行了动静分离,将静态资源直接放到nginx上,动态请求转发到uwsgi服务器进行处理。这样使整个服务器系统的性能、效率更高。
Nginx的简单使用的更多相关文章
- nginx知识点简单回顾
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- Centos6.7配置Nginx+Tomcat简单整合
系统环境:Centos 6.7 软件环境:JDK-1.8.0_65.Nginx-1.10.3.Tomcat-8.5.8 文档环境:/opt/app/ 存放软件目录,至于mkdir创建文件就不用再说了 ...
- nginx+keepalived简单双机主从热备
双机主从热备概述 可以两台机子互为热备,平时各自负责各自的服务.在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续 ...
- Linux yum的配置 , python环境管理, nginx搭建简单学习
Linux yum的配置 , python环境管理, nginx搭建简单学习 一丶配置yum的数据仓库 ### yum 工具, 方便,自行解决软件之间的依赖关系. # 配置yum源仓库 (可以使用,清 ...
- 以实际的WebGIS例子探讨Nginx的简单配置
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 以实际项目中的一个例子来详细讲解Nginx中的一般配置,其中涉 ...
- nginx 配置管理 - 简单也复杂
由于涉及到h5与后端交互,跨域问题,所以公司的开放测试服务器让我们自己搞nginx.顺便提升一下nginx的实践. nginx的安装,没什么难度了,百度一堆,如果源码安装就一步步来吧.(最简单的方式: ...
- Nginx个人简单理解
首先我们来补充下一些基本知识: 什么是代理服务器? 先举个简单的例子,现在我们在百度访问谷歌的网站,发现现在进不去,这个时候我们可以FQ(关于FQ,可以借鉴下这个博文:http://zhangge.n ...
- Linux下Nginx+PHP 简单安装配置
测试环境 Linux 2.6.18nginx-1.0.4 http://www.nginx.org/php-5.3.6 http://www.php.net/ 一,安装Nginxwget http:/ ...
- nginx日志简单分析工具
自己有个tony6.com的服务器,上面挂着我的博客,web服务器是nginx. 由于最近一直在折腾python,所以简单写了个nginx日志分析工具,它可以分析出每个IP的点击数量和IP所在地. # ...
- Linux安装Nginx以及简单理解
1.Nginx简单介绍 ①.Nginx:一个高性能的HTTP和反向代理服务器,高并发处理很不错. ②.反向代理:在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂 ...
随机推荐
- linux-Centos 7下bond与vlan技术的结合[推荐]
https://blog.51cto.com/sf1314/2073519 服务器eth0与eth1作bonding,捆绑成bond0接口,服务器对端交换机端口,同属于100.101号vlan接口 v ...
- 使用ant编译Android APK
ANT —— Apache Ant is a Java library and command-line tool that help building software. 1. 部署ANT的使用环境 ...
- 【转】网站出现service unavailable的解决方法
特别提示:本文的教程仅适合采用windows服务器的IIS组件上操作,service unavailable是许多网站会经常遇到的问题,希望对大家有用. 昨天一小段时间网站出现了service una ...
- 减轻Temporal AA 的 拖影问题(ghosting)
Temporal AA 效率高,但是有拖影等问题,UE4中可以如下修改减轻拖影问题: 搜索到PostProcessTemporalAA.usf文件,打开,找到 #define AA_DYNAMIC_A ...
- linux暴露端口可以被外部访问
linux暴露端口可以被外部访问,把端口号换成要暴露的端口:/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT Centos 7 开启端口Cen ...
- PyTestReport使用
PyTestReport详细介绍: https://testerhome.com/opensource_projects/78 示例代码 #coding:utf-8 import os,unittes ...
- [转]Hook executed successfully but returned HTTP 403
原文地址:https://www.cnblogs.com/chenglc/p/11174530.html jenkins配置gitlab的webhook,完成配置,测试结果显示 Hook execut ...
- Python变量和字符串详解
Python变量和字符串详解 几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣 ...
- 机器学习实战笔记-11-Apriori与FP-Growth算法
Apriori算法 优点:易编码实现:缺点:大数据集上较慢:适用于:数值型或标称型数据. 关联分析:寻找频繁项集(经常出现在一起的物品的集合)或关联规则(两种物品之间的关联关系). 概念:支持度:数据 ...
- JSP基础--九大内置对象
JSP九大内置对象 Object findAttribute(String name):依次在page.request.session.application范围查找名称为name的数据,如果找到就停 ...