Nginx服务器 Nginx虚拟主机 Nginx反向代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx服务器 Nginx虚拟主机 Nginx反向代理相关的知识,希望对你有一定的参考价值。



###################################################################################################3

nginx服务器:

1.轻量级http服务器,并发量高。
2.反向代理服务器。

#########################################################################################################3


准备四台虚拟机:
Web1:
eth1网卡:192.168.2.100
Web2:
eth1网卡:192.168.2.200
Proxy:
eth0网卡:192.168.4.5
eth1网卡:192.168.2.5
Client:
eth0网卡:192.168.4.100

防火墙设置为trusted
selinux设置为permissive

#################################################################################################
Proxy虚拟机:
安装nginx:
#yum -y install gcc pcre-devel openssl-devel? //安装依赖包,gcc用来源码编译,pcre-devel用来支持正则表达式,opssl-devel 用来生成密钥。
#useradd -s /sbin/nologin nginx??? //生成同名用户,目的是在使用软件时,不会是以root身份来启动或停止,防止攻击。
#tar -xf nginx-1.8.0.tar.gz??? //解包
#cd nginx-1.8.0?? ??? ??? ?
#./configure?? ??? ??? ??? ?
--prefix=/usr/local/nginx/?? ?//指定安装路径
--user=nginx?? ??? ??? ?//指定用户
--group=nginx?? ??? ??? ?//指定组
#make&&make install?? ??? ??? ?//安装
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/?? ?//创建软链接


nginx的使用方法:
#nginx ?? ?//启动服务
#nginx -s stop //关闭服务
#nginx -s reload //重启服务
#nginx -V?? ??? ?//查看软件信息

nginx的配置文件及目录:
#/usr/local/nginx?? ??? ?//安装目录
#usr/local/nginx/logs?? ?//日志
#/usr/local/nginx/html?? ?//网页目录
#/usr/local/nginx/conf/nginx.conf?? ?//配置文件
#/usr/local/nginx/sbin/nginx?? ??? ?//启动脚本

nginx是否开启:
#netstat -anptu | grep "nginx" ?? ?//查看进程

##########################################################################################################3

nginx升级(版本升级,模块升级):
以模块升级为例:

#./configure --help?? ?//可以查看nginx可以添加的模块,要在nginx-1.8.0目录下操作
#./configure --with-http_ssl-module?? ?//添加这个模块,用来做https
#make?? ??? ??? ?//只需要编译即可,因为这一步用来生成启动脚本
#cp /nginx-1.8.0/objs/nginx /usr/local/nginx/sbin/nginx?? ?//所以我们只需要把这个升级后的启动脚本,复制到nginx的启动脚本位置,将原来的脚本覆盖就可以实现升级。


注意:不需要进行make install操作,这一步是用来生成html logs conf 的,如果进行这一步操作,那么之前的数据全部会被覆盖。版本升级同理。

##############################################################################################

配置nginx:

#/usr/local/nginx/conf/nginx.conf?? ?//配置文件位置
user nginx;?? ??? ?//进程所有者
error_log? logs/error_logs;?? ?//错误日志
pid ??? ????? logs/nginx.pid?? ?//pid
events {
??? worker_connections? 1024;?? ??? ?//单个进度最大并发量
}

配置容器:
# vim /usr/local/nginx/conf/nginx.conf
server {
??????? listen?????? 80;?? ??? ??? ??? ?//监听端口
??????? server_name? localhost;?? ??? ?//域名
??????? auth_basic "Input Password:";??????? //认证提示符
??????? auth_basic_user_file "/usr/local/nginx/pass";??????? //认证密码文件
??????? location / {
??????????? root?? html;?? ??? ??? ??? ?//网页默认存放目录
??????????? index? index.html index.htm;?? ?//网页格式
??????? }
? }

#yum -y install httpd-tools ?? ??? ?//用来生成密码文件的工具
#htpasswd -cm /usr/local/nginx/pass jerry?? ?//账户名为jerry,pass文件中存放的账户信息(密码为密文)。
New password: ?? ??? ??? ??? ??? ?//输入密码
Re-type new password: ?? ??? ??? ??? ?//确认密码
Adding password for user jerry?? ??? ??? ?//创建成功
#htpasswd -m /usr/local/nginx/pass? harry?? ?//追加用户不能加-c,否则就会覆盖。


Client虚拟机:
#firefox http://192.168.4.5?? ??? ?//需要输入用户名密码

######################################################################################################33、


基于域名的虚拟主机:

Proxy虚拟机:

#vim /usr/local/nginx/conf/nginx.conf

server {
?? ?? listen 80;?? ??? ?//端口
?? ?? server_name www.a.com;?? ?//域名
?? ? ......
?? ? }
server {
?? ?? listen 80;?? ??? ?? //端口
?? ??? server_name www.b.com; //域名
?? ?.......
?? ? }

Client虚拟机:
# vim /etc/hosts?? ??? ??? ?//设置本机DNS解析
192.168.4.5 www.a.com www.b.com //确保客户端可以解析这两个域名,从而去寻找192.168.4.5(服务端)

基于端口的虚拟主机:


#vim /usr/local/nginx/conf/nginx.conf

server {
?? ?? listen 8000;?? ??? ?//端口
?? ?? server_name www.a.com;?? ?//域名
?? ? ......
?? ? }
server {
?? ?? listen 8080;?? ??? ?? //端口
?? ??? server_name www.b.com; //域名
?? ?.......
?? ? }

基于ip的虚拟主机:

#vim /usr/local/nginx/conf/nginx.conf

server {
?? ?? listen 192.168.0.1:80;?? ??? ?//端口
?? ?? server_name www.a.com;?? ?//域名
?? ? ......
?? ? }
server {
?? ?? listen 192.168.0.2:80;?? ??? ?? //端口
?? ??? server_name www.b.com; //域名
?? ?.......
?? ? }

一台虚拟机可以有多张网卡,但是基于ip的虚拟主机使用很少,基本都是使用基于域名的端口的。

#########################################################################################################3

ssl虚拟主机:

Proxy虚拟机:

nginx必须安装 --with-http_ssl_module模块。

#openssl genrsa -out private.key ?? ?//生成私钥,用来解密
#openssl req -new -x509 -key private.key -out public.pem ?? ?//生成公钥(证书),用于解密

注意:私钥(private.key)和公钥(public.pem),的名称是可以随意指定的,但是要保持生成的公私钥,在/usr/local/nginx/conf/目录下,而且需要和配置文件中的名称相同。

#vim /usr/local/nginx/conf/nginx.conf

sever {
??? ?listen 443 ssl;
?? ?server_name www.c.com;
?? ?ssl_certificate public.pem;?? ?//公钥,和生成的公钥名称保持一致
?? ?ssl_certificate_key private.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 -s reload ?? ?//重启服务

Client虚拟机:

#vim /etc/hosts
192.168.4.5 www.c.com?? ?//确保客户端可以解析此域名

#firefox https://www.c.com?? ?//信任证书之后就可以访问

##########################################################################################################

nginx反向代理:

proxy不提供页面,而是通过后端的Web1和Web2,来提供页面。与varnish反向代理不同的是,varnish有缓存页面,而nginx反向代理,相当于一个调度器,它本身是没有缓存页面的,所以效率更高。

Web1虚拟机:
#yum -y install httpd
#echo "192.168.2.100" > /var/www/html/index.html ?? ??? ?//部署测试页面
#systemctl start httpd
#systemctl enable httpd

Web2虚拟机:
#yum -y install httpd
#echo "192.168.2.200" > /var/www/html/index.html ?? ??? ?//部署测试页面
#systemctl start httpd
#systemctl enable httpd

proxy虚拟机:
#vim /usr/local/nginx/conf/nginx.conf

http {
.. ..
upstream dcc {?? ??? ??? ??? ?//添加服务器池,
??????????????? server 192.168.2.100 ;
??????????????? server 192.168.2.200 ;
??????? }
.. ..
server {
??????? listen??????? 80;
??????? server_name? www.a.com;
??????????? location / {
??????????? proxy_pass http://dcc;?? ?//当客户端访问时,读配置文件,到这一行之后,会告诉客户端,跳到dcc(服务器池),从而实现反向代理。
??????? }
}

#nginx -s reload

Client虚拟机:
#curl http://192.168.4.5 ?? ?//多次访问,查看效果。结果:192.168.2.100和192.168.2.200轮流出现。

##################################################################################################



proxy虚拟机:
#vim /usr/local/nginx/conf/nginx.conf

http {
.. ..
upstream dcc {?? ??? ??? ??? ?//添加服务器池,
??????????????? server 192.168.2.100 weight=1;?? ?//weight权重为1
??????????????? server 192.168.2.200 weight=2;?? ?//weight权重为2
??????? }
.. ..
server {
??????? listen??????? 80;
??????? server_name? www.a.com;
??????????? location / {
??????????? proxy_pass http://dcc;?? ?//当客户端访问时,读配置文件,到这一行之后,会告诉客户端,跳到dcc(服务器池),从而实现反向代理。
??????? }
}

#nginx -s reload

Client虚拟机:
#curl http://192.168.4.5 ?? ?//多次访问,查看效果。
结果:192.168.2.100出现1次? 192.168.2.200出现2次。以此循环。

##################################################################################################


proxy虚拟机:
#vim /usr/local/nginx/conf/nginx.conf

http {
.. ..
upstream dcc {?? ??? ??? ??? ?//添加服务器池,
???? server 192.168.2.100 weight=1 max_fails=1 fail_timeout=20;?? ?//weight权重为1,失败次数为1,超时时间为20。当访问192.168.2.100访问失败时(失败次数只有1次),不会再去尝试访问192.168.2.100,再过20钟之后,会再次访问192.168.2.100。 如果不想让客户端访问192.168.2.100,可以在语句后加上 down;
???? server 192.168.2.200 weight=2;?? ?//weight权重为2
??????? }
.. ..
server {
??????? listen??????? 80;
??????? server_name? www.a.com;
??????????? location / {
??????????? proxy_pass http://dcc;?? ?//当客户端访问时,读配置文件,到这一行之后,会告诉客户端,跳到dcc(服务器池),从而实现反向代理。
??????? }
}

#nginx -s reload

Client虚拟机:
#curl http://192.168.4.5 ?? ?//多次访问,查看效果。
结果:关闭192.168.2.100的http服务,然后再开启http服务,来模拟192.168.2.100故障。
就会出现,然后多次访问,一直出现192.168.2.200,20秒后,恢复正常(192.168.2.100出现1次? 192.168.2.200出现2次。以此循环)

#####################################################################################################



proxy虚拟机:
#vim /usr/local/nginx/conf/nginx.conf

http {
.. ..
upstream dcc {?? ??? ??? ??? ?//添加服务器池,
???? ip_hash;?? ??? ??? ??? ?//相同客户端访问,提供相同页面。
???? server 192.168.2.100 weight=1 max_fails=1 fail_timeout=20;?? ?//weight权重为1,失败次数为1,超时时间20
???? server 192.168.2.200 weight=2;?? ?//weight权重为2
??????? }
.. ..
server {
??????? listen??????? 80;
??????? server_name? www.a.com;
??????????? location / {
??????????? proxy_pass http://dcc;?? ?//当客户端访问时,读配置文件,到这一行之后,会告诉客户端,跳到dcc(服务器池),从而实现反向代理。
??????? }
}

#nginx -s reload

Client虚拟机:
#curl http://192.168.4.5 ?? ?//多次访问,查看效果。
结果:第一次访问出现哪个页面,接下来每次访问就是相同页面。















以上是关于Nginx服务器 Nginx虚拟主机 Nginx反向代理的主要内容,如果未能解决你的问题,请参考以下文章

nginx虚拟主机搭建

Nginx的相关问题

ngin配置301重定向设置方法和nginx子目录301重定向

Vue项目部署(Nginx)

nginx服务器配置

通过 Nginx 反向代理在 Apache 中使用多个 WSGI 挂载点