ubuntu下nginx安装与使用笔记

最近转过来开发app,一番折腾+研究,发现真的是隔行如隔山,好多东西都不能按照游戏服务器开发的思路来。

这一篇主要记录关于ngnix在ubuntu下搭建nginx环境以及过程中遇到的问题,暂时只是简单了解一部分皮毛,如果以后遇到更深入的知识,会持续更新。

1、nginx 的安装

安装环境:ubuntu Release: 14.04

小知识:

如何查看ubuntu版本号? 1、cat /etc/issue
2、lsb_release -a (此方法显示内容更详细)

安装方法百度很多,这里我只实践了在线安装部分,也推荐在线安装。

1-1 在线安装,推荐 $sudo apt-get install nginx

ubuntu安装Nginx之后的文件结构大致为:

  • 配置文件都在 /etc/nginx 下,且每个虚拟主机已经安排在了 /etc/nginx/sites-available
  • 启动程序文件在 /usr/sbin/nginx
  • 日志放在 /var/log/nginx 中,分别是 access.log 和 error.log
  • 启动脚本在 /etc/init.d/
  • 默认的虚拟主机的目录设置在了/usr/share/nginx/www

1-2 源代码安装

下载地址:http://nginx.org/download/

安装过程很简单,如下:

$./configure
$make
$make install

安装成功之后,nginx放置在/usr/local/nginx目录下,主要的配置文件为conf目录下的nginx.conf,nginx的启动文件在sbin目录下的nginx文件。

2、nginx 启动

注意:nginx 默认监听80端口,如果无法启动,请查看80端口是否被占用,请检查是否安装了apache,或者修改ngnix的配置文件,将ngnix的监听端口改为8080。有关nginx配置会在下面详细说明。

小知识:

查看端口占用情况:

netstat -nltp|grep 80  t表示tcp协议;l表示仅列出有在 Listen (监听) 的服務状态
或者
netstat -anp|grep 80

2-1 在线安装的启动过程 $sudo /etc/init.d/nginx start

2-2 源代码安装的启动过程

命令如下:

$cd /usr/local/nginx
$sbin/nginx

当然,也可以使用 service nginx start 来启动。 启动后,在浏览器中输入 http://192.168.1.112,(ip地址根据个人情况而定,我的nginx搭建在ip:192.168.1.112的ubuntu上,然后在ip:192.168.1.106的window上访问。) 如果浏览器显示 Welcome to nginx! 则表示nginx启动成功。

3、nginx 配置

3-1 基本配置

Nginx的配置文件是/etc/nginx/nginx.conf

  • 修改listen端口: listen 8080
  • 修改其他,待后面来搞

3-2 反向代理配置

http反向代理:

server{
	listen 80;
	server_name 192.168.1.112:8080;
	charset utf-8;
	location / {
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://192.168.1.112:8080;
   }
}

https反向代理:

server{
	listen 443;
	server_name 192.168.1.106:8087;
	ssl on;
	ssl_certificate  /root/tools/cert.pem;
	ssl_certificate_key  /root/tools/key.pem;
	location / {
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass https://192.168.1.106:8087;
	}
}

3-3 负载均衡配置

nginx的负载均衡配置放在 upsteam 字段,例如:

upstream a.com {
  server  192.168.5.126:80;
  server  192.168.5.27:80;
}

这里的 a.com 表示要负载均衡的 web server。

注意:upstream字段要定义在 server{}外面,不能定义在server内。 定义好upstream之后,需要在server内的proxy_pass引用下,注意要在前面加上 http://

server {
	location / {
		proxy_pass  http://test.net;
	}
}

修改配置后,使用命令重启:

root@VM-169-246-ubuntu:~# service nginx reload
* Reloading nginx configuration nginx 				[ OK ]

root@VM-169-246-ubuntu:~# service nginx restart

4、出现的问题

4-1 配置好server后,总是显示 welcome to nginx

解决办法: vim打开 /etc/nginx/nginx.conf,这里的配置属于nginx的高层配置,,在http{}中找到一行: include /etc/nginx/sites-enabled/*,把它注释掉,因为这里包含了一份default默认配置,打开default可以看到,这里也配置了一份server{},监听了80端口,根据server的查询顺序,找到一个匹配后,就不再向后匹配,所以,如果不注释掉这一行的话,后面的所有的http反向代理都会被拦截。

4-2 server nginx reload fail

解决办法: 没办法,看日志。 nginx 的日志路径:/var/log/nginx/*.log,里面有详细的错误日志和access日志。最后发现 https 部分配置错误,

server{
    listen 443;
    server_name 192.168.1.106:8087;
    ssl on;
    ssl_certificate  /root/tools/cert.pem;
    ssl_certificate_key  /root/tools/key.pem; #这里不要忘记key和cert
    location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

4-3 server nginx restart fail

解决上面的问题,restart的时候,发现fail,查日志,提示 bind() to 0.0.0.0:443 failed (98: Address already in use), 很明显,这里应该是地址或者端口被占用,查找 443端口的占用情况:

root@st-B85M-DS3H:/etc/nginx# netstat -nltp|grep 443
tcp6       0      0 :::443                  :::*                    LISTEN      1354/apache2

很显然,443被占用,kill 1354, 然后restart,OK

参考:

参考1 参考2 参考3