nginx实践(一)、安装和部署
来源:互联网 发布:达内软件科技 编辑:程序博客网 时间:2024/06/05 20:14
很长一段时间没有更新blog,因为这一段时间,都在研究一个实时事件处理应用,计划把该实时事件处理服务,修改为分布式服务。相关内容以后再与大家汇报。
好了,因为工作缘故,要分析一个使用nginx的应用,所以从本节开始,介绍一下nginx的相关实践内容。
一、本节目标
1、实践nginx的安装和部署、配置
2、验证nginx的反向代理功能
二、环境准备
1、准备1台虚拟机centos6.5
2、分别部署2套tomcat(说明:做反向代理只用一个,做负载均衡才需要2套)
3、下载nginx 稳定版 ,下载地址http://nginx.org/
下载完成后,将下载的文件nginx-1.12.0.tar.gz上传到虚拟机上。
三、安装、部署、配置
我是放在/home/nmc/soft/nginx目录(这是nginx软件目录,不是最终部署目录),进入目录后,执行如下命令
gzip -d nginx-1.12.0.tar.gz
tar -vxf nginx-1.12.0.tar
进入nginx-1.12.0 目录,解压后的目录结构如下:
下面,我们需要将nginx 进行编译,因为nginx 是用c开发的,所以一般我们需要用 config,make ,make install 方式。
在nginx 软件目录里面,执行 ./configure --prefix=/home/nmc/dev/nginx
这里的目录是最终要部署的目录。执行的时候,如果报告如下error: ./configure: error: the HTTP rewrite module requires the PCRE library.
注: HTTP rewrite 模块说明: 【Rewrite是一种服务器的重写技术,它可以使得服务器可以支持 URL 重写,是一种最新流行的服务器技术。它还可以实现限制特定IP访问网站的功能。很多情况下,某个 IP 的访问很容易造成 CPU 100% (比如 某些搜索引擎的固定抓取,别人大量的采集站点),这个时候我们就要利用一些有效的手段封掉对方的 IP,让他无法消耗服务器的资源,封 IP 的方法有很多种,如果你的 Web 服务器安装了 Rewrite 模块的话,也可以试试利用 Rewrite 规则封掉对方的 IP】
还是挺重要的,所以还是装吧。用yum 方式安装,执行如下命令:
yum -y install pcre-devel
安装完成后,再次运行config,成功后显示如下内容:
Configuration summary + using system PCRE library + OpenSSL library is not used + using system zlib library nginx path prefix: "/home/nmc/dev/nginx" nginx binary file: "/home/nmc/dev/nginx/sbin/nginx" nginx modules path: "/home/nmc/dev/nginx/modules" nginx configuration prefix: "/home/nmc/dev/nginx/conf" nginx configuration file: "/home/nmc/dev/nginx/conf/nginx.conf" nginx pid file: "/home/nmc/dev/nginx/logs/nginx.pid" nginx error log file: "/home/nmc/dev/nginx/logs/error.log" nginx http access log file: "/home/nmc/dev/nginx/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp"
接下来,我们运行:
make
make install
make的时候,会比较长时间
完成后,我们去部署目录(/home/nmc/dev/nginx)其目录结构如下:
[root@cwqsolo nginx]# ls -ltotal 16drwxr-xr-x 2 root root 4096 Apr 21 17:50 confdrwxr-xr-x 2 root root 4096 Apr 21 17:50 htmldrwxr-xr-x 2 root root 4096 Apr 21 17:50 logsdrwxr-xr-x 2 root root 4096 Apr 21 17:50 sbin[root@cwqsolo nginx]# pwd
四、验证
1、首先验证nginx是否能正常工作
进入/home/nmc/dev/nginx/sbin 目录, 运行 ./nginx 启动
如果启动报错比如端口被占用,那么我们需要修改一下nginx 的端口
[root@cwqsolo sbin]# ./nginxnginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] still could not bind()
通过netstat -ltunp 命令可以查看80 端口是被什么占用,本机因为开启了httpd 服务,所以已经用80端口,修改nginx配置文件,更改端口
进入conf 目录,修改nginx.conf 的server 中端口 =》listen 8080;
修改完成后,重启nginx,正常不报告任何信息,就是启动成功了,下面我们通过url http://192.168.136.144:8080 来查看。
ip是nginx服务所在ip,如果在nginx本机上也可用localhost 来代替ip。
【坑:】
如果启动后,访问url出现403 错误
可以查看一下日志。 nginx/logs目录下的err 日志
136.1, server: localhost, request: "GET / HTTP/1.1", host: "192.168.136.144:8080"2017/04/21 18:09:46 [error] 8000#0: *13 "/home/nmc/dev/nginx/html/index.html" is forbidden (13: Permission denied), client: 192.168.136.1, server: localhost, request: "GET / HTTP/1.1", host: "192.168.136.144:8080"2017/04/21 18:10:59 [error] 8000#0: *14 "/home/nmc/dev/nginx/html/index.html" is forbidden (13: Permission denied), client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", host: "localhost:8080"
根据日志提示,权限拒绝,我们看一下nginx目录
发现很多目录是nobody 账户,查了一下,是因为nginx启动work进程是 nobody账号,而我是在用root账号部署和启动的,所以nobody进程(nginx work)无法访问 nginx下的几个目录如html。知道原因,好,有2个办法:
办法1: 设定启动work的 用户为root
办法2: 修改nginx的进程和用户
我采用的是办法2, 先用chown -R nmc:nmc nginx 命令修改nginx目录的用户和用户组,然后用nmc用户启动nginx进程,这样就解决了。
解决后访问url,显示如下页面
2、 验证反向代理功能
这里验证,需要用到前面提的tomcat应用,当然也可以用其他提供http服务的应用。
【扩展阅读】代理与方向代理:通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。
下面是一个原理示意图,注意图中网络云的位置,代表了不同模型中屏蔽的信息的不同。
验证方向代理的步骤:首先启动一个http服务,如tomcat,配置nginx中的反向代理,重启nginx,通过nginx暴露的url访问。
1)首先启动准备好的tomcat ,在本例中是 http://192.168.136.144:9080/ 页面如下所示:
2) 修改nginx的配置,加入下面标红的内容
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; upstream mysvr { server 192.168.136.144:9080 max_fails=3 fail_timeout=30s; } #gzip on; server { listen 8080; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://mysvr; root html; index index.html index.htm; } #error_page 404 /404.html;上面配置文件中:
upstream mysvr { server 192.168.136.144:9080 max_fails=3 fail_timeout=30s; }
这里配置了一个服务器,也就是被代理的服务proxy_pass http://mysvr;
这里将对nginx的访问指向了被代理的url服务。
修改nginx.conf 后,可以通过如下命令使配置生效: ./nginx -s reload
执行后,重新访问如下url http://192.168.136.144:8080 发现已经指向被代理的url http://192.168.136.144:9080 端口
- nginx实践(一)、安装和部署
- Redis实践(一):安装和部署
- Mysql 实践(一):部署和安装
- hive 实践(一):部署和安装
- Redis实践(一):安装和部署
- ZABBIX实践(一) 服务端部署和安装
- Nginx详细安装部署教程(一)
- nginx服务一---nginx部署安装记录
- Nginx的安装和部署
- FastDFS安装、配置、部署(一)-安装和部署
- FastDFS安装、配置、部署(一)-安装和部署
- FastDFS安装、配置、部署(一)-安装和部署
- FastDFS安装、配置、部署(一)-安装和部署
- FastDFS安装、配置、部署(一)-安装和部署
- FastDFS安装、配置、部署(一)-安装和部署
- FastDFS安装、配置、部署(一)-安装和部署
- linux 服务器部署 lnamp 一nginx安装
- tensorflow实践(一) 安装和调试
- HDU 1206 Ignatius and the Princess I(BFS+记录路径)
- session入memcache
- Java自带性能分析工具
- go语言坑之并发访问map
- Flume Kafka收集Docker容器内分布式日志应用实践
- nginx实践(一)、安装和部署
- 【SSLGZ 2648】线段树练习五
- L2-023. 图着色问题
- 告诉您:解决Windows 10上的广告办法
- 尼姆博奕 (Nimm Game) 异或运算;
- 想成为Java高级工程师的看过来
- 服务
- Android体育场地预订APP(二)
- CSS3的布局样式相关