Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
一、Nginx的安装
- 安装环境:CentOS 7.3
- 安装方式:yum安装
- 安装命令:使用以下命令,"一键"安装
yum -y install nginx
二、Nginx启动和简单配置
- 启动命令:"一键"启动
service nginx start
- 查看运行状态
ps -ef|grep nginx
- 访问页面结果
这里由于使用了默认80端口启动,所以我们直接访问服务器的ip地址检验结果,出现*Welcome to nginx!*则表示已经启动成功,运行正常。
我们在服务器中使用以下命令查看nginx进程和配置文件路径,这里注意下方红框部分则是我们的配置文件路径。
ps -ef|grep nginx
我们进入到指定目录下查看nginx.conf文件内容,我这里用vim编辑命令打开,若不支持vim则可以使用vi命令
vim /etc/nginx/nginx.conf
该文件下指向/etc/nginx/conf.d目录下后缀名为.conf的配置文件,同样我们进入到该目录下列出文件列表
cd /etc/nginx/conf.d # 进入到该目录下
ls # 列出该路径下的所有文件名
发现该目录下只有一个default.conf文件,我们就可以定位到最终的配置文件即是/etc/nginx/conf.d/default.conf,我们同样用vim命令查看该文件内容。有可能遇到在/etc/nginx/conf.d目录下没有default.conf文件的情况,这时候直接新建一个同名的文件然后将以下配置文件先写入再进行调整即可。
vim /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name zym.vainycos.cn;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
proxy_pass http://xxx.xxx.cn;
}
#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 /usr/share/nginx/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;
#}
}
这份配置文件中,主要关注listen/server_name/location这三个地方。
- listen:表示监听端口号,假设nginx部署的服务器ip地址为192.168.1.1,那么这个nginx服务就是监听该ip的80端口,只有80端口才会被nginx捕获到进行处理
- server_name:表示该服务的别名,这里可以自定义但是注意别用特殊符号,建议用全英文,原则是看得懂就行
- 重点是location:表示nginx需要代理的地址,初始部分已经被我注释了,初始文件内容是:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
这一段的意思是,当你用192.168.1.1访问的时候由于使用了默认80端口,就会进入/usr/share/nginx/html目录进行查找资源,而默认访问的是index.html界面。假设/usr/share/nginx/html目录下有个hello.html文件,那我们就直接可以用192.168.1.1/hello.html进行访问。这里表示访问的是本地资源,那么我们该如何访问到另一台服务器的资源呢。
这里就要更改location的内容了:
location / {
proxy_pass http://192.168.1.2:8080/;
}
修改格式注意:注释上述的默认本地路径配置,加上proxy_pass配置,后面跟上你要访问另一台服务器的ip号+端口,这里假设我的另一台服务器ip为192.168.1.2,端口开放访问为8080。
设置完之后保存并退出,并刷新nginx的配置
nginx -s reload
这个时候你再访问192.168.1.1指向的其实就是192.168.1.2中8080端口服务的资源啦,是不是觉得挺神奇的。这个时候你就可以将你的Web服务分成好几部分,例如这里我将nginx服务部署于192.168.1.1,用192.168.1.2专门用来放置静态资源,用第三台服务器192.168.1.3专门处理java服务,均摊了各个服务器的承载能力,提高了业务承重上限,当然这也只是我个人的理解可能不是很严谨,希望各位在评论中分享真实业务环境中nginx的使用,对于我说的不对的地方也可以直接提出。
nginx应该还有更强大的功能,这只是它的冰山一角,后续在开发过程中有应用场景再做具体分析。
新的业务场景
若我在本地除了访问默认的静态资源之外,在另一个服务器目录中存放了图片地址,那么我们在配置文件中就可以配置多个location节点来达到目的:
location / {
#root html;
root /usr/share/nginx/html;
index index.html index.htm;
}
location /img/ {
alias /usr/local/images/;
autoindex on;
}
如上我配置了两个location节点,第一个则是默认的静态访问路径,即表示访问ip:port/到/usr/share/nginx/html目录下访问。这个时候我需要配置第二个访问图片的路径,而图片路径与第一个静态访问目录没有处在同一个,所以第二个location节点我将它配置成/img/,即表示ip:port/img/到usr/local/images/目录下访问。若需要配置多个访问路径也同理,可以同时存在多个location节点,只是location的属性要做区分,类似于加上项目名的概念来进行准确区分。
参考资料:
- @Nginx反向代理——简单体验Nginx反向代理功能
- @nginx配置访问本地静态资源