Nginx官方网站 中文 英文
#这里好像没法搜;举几个例子:
resolver:位于 HTTP Core模块*
proxy_pass:位于 HTTP Proxy 模块
1、pcre依赖安装
官网下载:这里下载8.37版本,得到 pcre-8.37.tar.gz 上传到linux机器。
https://sourceforge.net/p/pcre/activity/?page=0&limit=100#5a81db4a5fcbc934232f5f55
#解压缩
tar zxvf pcre-8.37.tar.gz
cd pcre-8.37
#检查 与 安装
./configure
make && make install
#验证安装成功
pcre-config --version
如下图即为安装成功
2、openssl、zlib依赖安装
#执行yum一次性安装
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
如果出现“Multilib version problems found.”的报错,就按照提示加上“--setopt=protected_multilib=false”。
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel --setopt=protected_multilib=false
没有明显报错应该就是ok的。
3、Nginx的安装与启动
(1) 官网 下载对应版本
#这里下载的是1.12.2版本
wget http://nginx.org/download/nginx-1.12.2.tar.gz
#解压缩:
tar zxvf nginx-1.12.2.tar.gz
#安装
cd nginx-1.12.2
./configure
make && make install
如下是正常安装:
安装后在 /usr/local 路径下多了个 nginx 目录;
cd nginx 里面的sbin目录内有可执行文件nginx;这个就是启动nginx的可执行文件了。
(2)启动
(4)启动nginx
cd /usr/local/nginx/sbin
./nginx
4、验证安装成功
(1)查看进程是否ok,如下即为符合预期的结果。
(2)浏览器访问验证
在nginx/conf/nginx.conf中可以看到其默认监听的是80端口,如下:
注意:./conf/nginx.conf就是nginx的配置文件。
浏览器我们直接输入目标Linux机器的公网ip,如下效果就说明部署成功了。
5、注意事项
情况一:如果是云服务器的话可能要在安全组放开80端口;
情况二:如果开启防火墙的话还要住下下给防火墙开放对应端口。
关于防火墙配置命令参见 防火墙相关命令_焱齿的博客-CSDN博客
前言:使用nginx操作命令的前提条件是:必须进入nginx的目录。
cd /usr/local/nginx/sbin
2、常用命令
#查看nginx版本号
./nginx -v
#启动nginx
./nginx
#关闭nginx
./nginx -s stop
#重新加载nginx(如果修改nginx.conf中的配置,又不想重启nginx可以执行重加载)
./nginx -s reload
前言:nginx的配置文件路径为 /usr/local/nginx/conf/nginx.conf
nginx文件的组成主要包括三部分:
1、第一部分:全局块
配置文件开头至events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令。包括配置运行Nginx服务器的用户(组)、允许生成的worker preocess数,进程PID存放路径、日志存放路径和类型以及配置文件引入等。例如:
worker_processes 1;
这是Nginx服务器并发处理服务的关键配置,worker_precesses值越大,可以支持的并发处理量也越多。注:但是会受到硬件、软件等设备的制约。
2、第二部分:events块
events块主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否运行同时允许接受多个网络连接,选取哪种时间驱动模型来处理连接请求,每个work process可以同时支持的最大连接数等。如下:
worker_connections 1024;
表示每个work process支持的最大链接数为1024.
注:这部分的配置对Nginx性能影响较大,在实际使用中应灵活配置
3、第三部分:http块
Nginx服务器中配置最频繁的部分。其有包含两部分:http全局快、server块。例如可以在此块中include其他路径的配置文件。
include /usr/local/services/zs_nginx_conf-1.0/conf/*.conf;
(1)http全局块
http全局快配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。
(2)server块
和虚拟主机有密切联系。注:从用户角度,虚拟主机就和一台独立的物理主机是一样的。
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
每个server块也分为全局server块,一级可以同时包含多个location块。
注:不同的server不能ip:port同时相同!!!!
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
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;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#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;
}
#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;
# }
#}
}
1、目标。
部署Nginx作为透明代理代理上网。相当于请求打到nginx后,nginx直接转发到互联网。
http {
resolver 8.8.8.8;
server {
listen 7765;
location / {
proxy_pass http://$http_host$request_uri;
}
}
}
nginx实现代理上网,有三个关键点必须注意,其余的配置跟普通的nginx一样:
1.增加dns解析resolver;
2.增加无server_name名的server;
3.proxy_pass指令;
wget验证通过代理访问网页。
wget -c -r -np -k -L -p -e "http_proxy=http://118.xxx.193.69:7765" www.baidu.com
1、准备与目标
如前所述,安装了httpd服务器。因为nginx占用的80端口,所以这里配置httpd监听的8080端口;而且我们放置了一些网页资源,通过8080端口可以访问相应资源。
接下来我们配置一个反向代理,通过访问nginx默认监听的80端口就可以访问到httpd的8080端口提供的资源。
注:另外为了ip不直接包括在url中我们额外配置一下浏览器所在机器的
对于mac电脑修改起来很简单。
vim /etc/hosts
#添加如下记录就好
118.xxx.xxx.69 www.shuozhuo.com
测试一下果然能通过域名访问了。
这里想把端口8080去掉,会发现是不行的。接下来我们要做的就是默认访问也能访问到这个资源。
2、具体配置与测试
如下。在nginx.conf下添加如下两句。
#就是nginx部署机器的ip
server_name 118.195.193.69;
#将nginx 80端口监听的符合”location /“的请求都转发到本机的8080端口
proxy_pass http://127.0.0.1:8080;
重新加载nginx。
./nginx -s reload
之后按照默认端口访问就是可以的了。如下:
在nginx/logs目录下的access.log也是可以看到每次操作的日志记录的.
3、结论
现在这里实现了隐藏真实服务器的效果,其实就是一个反向代理了。
1、前期准备&目标
安装并配置好tomcat服务器;默认开放8081端口。准备好对应的网页!
#tomcat页面路径下创建 注:安装目录/webapps
/tomcat/a.html
//网页内容为
Welcome to tomcat!!
#httpd页面路径下创建 注:默认是绝对路径 /var/www/html
/httpd/a.html
//网页内容为
Welcome to httpd!!
安装并配置好httpd服务器;默认开放8080端口。准备好对应的网页!
通过请求url路径路由到不同的web服务器。具体来说:路径中含有/tomcat就路由到tomcat、路径中含有/httpd就路由到httpd服务器。
2、配置nginx
nginx.conf中添加如下server(监听9000端口)。
server {
listen 9000;
server_name 118.195.193.69;
location ~ /httpd/{
proxy_pass http://127.0.0.1:8080;
}
location ~ /tomcat/{
proxy_pass http://127.0.0.1:8081;
}
}
#解释
①这段配置的含义是监听本机(118.195.193.69)的9000端口。
②请求uri匹配httpd字段就把请求转发到本机(127.0.0.1)的8080端口;就是httpd服务监听的端口。
③请求uri匹配tomocat字段就把请求转发到本机(127.0.0.1)的8081端口;就是tomcat服务监听的端口。
#其他关键字
(1)server→resolver:resolver的作用是指定DNS机器;例如:
server{
resolver 10.xxx.xx.54 10.xxx.xx.15 ipv6=off;
}
#关键词解释
(1)proxy_pass:为代理转发的关键词
(2)root: 用于指定资源的root路径.如下例子中,实际的访问路径应该是 web服务器默认路径/opt/test/demo
location /demo {
root /opt/test;
}
(3)expires: 配置缓存时间
expires 30s; #缓存30秒
expires 30m; #缓存30分钟
expires 2h; #缓存2小时
expires 30d; #缓存30天
例如:
location ~ /tomcat/{
proxy_pass http://127.0.0.1:8081;
expires 30d;
}
#配置解释
(1)~ :用于表示uri包含正则表达式,并且区分大小写
(2)~* :用于表示uri包含正则表达式,不区分大小写
(3)= :用于不包含正则表达式的uri前,要求请求字符串与uri严格匹配;如果匹配成功就会立即处理,不在继续往下搜索。
(4)^~ : 用于不包含正则表达式的uri前,要求Nginx找到表示uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不使用location块中的正则uri和请求字符串做匹配。
匹配优先级: = 、 ^~ 、 ~/~*、不带符号。
3、验证效果
重启nginx
./nginx -s reload
访问效果如下:
负载均衡本质也是反向代理的一种!!!
#http块中加入如下upstream
upstream shuozhuosvr{
# ip_hash;
server 118.195.193.69:8080 weight=1;
server 118.195.193.69:8081 weight=2;
}
#server块中添加如下配置
location / {
root html;
proxy_pass http://shuozhuosvr ;
index index.html index.htm;
}
#upstream基本语法
(1)一个upstream需要设置一个名称,这个名称可以在server里面当做proxy主机使用。
(2)一个upstream可以设置多个server,默认Nginx会轮询每个server,从而达到最基本的负载均衡效果。
(3) weight:每个server可以设置weight字段,实现简易的有权重的负载均衡。
(4) max_fails: 每个server可以设置max_fails字段;请求server发生错误失败数会累加,如果达到max_fails后,nginx会标记这个server为故障状态从而不去请求该server。
(5) fail_timeout: 前面说过了max_fails是请求server错误次数,如果达到了max_fails次数之后server会被标记为故障状态,那么多长时间会重新尝试呢?这个fail_timeout就是这个时间了,在达到max_fails次数之后server进入故障状态,而后在fail_timeout时间之后会被重新标记为正常状态。默认情况下,fail_timeout的时间是10秒。
(6)backup: 这个是备用服务器参数,可以为一个upstream设置一个backup的server,在生产server全部都出问题之后,可以自动切换到备用server上,为回复服务争取时间。
upstream default {
server ip1:9000 max_fails=5;
server ip2:9000 max_fails=3;
}
upstream default {
server ip1:9000 max_fails=5 fail_timeout=100;
server ip2:9000 max_fails=3 fail_timeout=60;
}
upstream default {
server ip1:9000 max_fails=5 fail_timeout=100;
server ip2:9000 max_fails=3 fail_timeout=60;
server backupip:9000 backup;
}
#其他可用策略
(1)轮询(默认)
(2)weight 设置权重
(3)ip_hash :每个请求按照访问ip的hash结果进行分配。这样每个固定的访客只会访问固定的后端服务器,可以解决session等问题。
upstream shuozhuosvr{
ip_hash;
server 118.195.193.69:8080;
server 118.195.193.69:8081;
}
(4)fair: 按照后端服务器的相应时间来分配请求,相应时间越短越优先分配。
upstream shuozhuosvr{
server 118.195.193.69:8080;
server 118.195.193.69:8081;
fair
}
结合keepalived就可以实现自动的主备切换效果!!