如何高大上的解决404问题

如何高大上的解决 404

配置完vhost.conf后,访问域名返回404.依次检查

  • selinux是否关闭
  • 域名路径是否正确
  • hostname与ip是否对应

这几处都没有问题,那该怎么办呢?

nginx的进程模型是 master-worker模式.由worker进行负责具体的cgi请求解析.

[sujianhui@dev529 public]$>ps aux | grep nginx
root      9977  0.0  0.0  47496  2444 ?        Ss   15:13   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
sujianh+ 19271  0.0  0.0  49584  2732 ?        S    20:27   0:00 nginx: worker process
sujianh+ 19992  0.0  0.0 112720   964 pts/0    S+   20:44   0:00 grep --color=auto nginx

如果能追踪到worker进程load哪个文件就好了,去验证一下文件存在不存在就完事,问题是如何追踪呢?

linux上有一个工具strace,可以监测进程发起的系统调用.也就是说,操作系统的六大基本操作我们都可以看到.其中有一个系统调用stat,获取文件的元信息.
所以我们监测这个即可.

因为我只开了一个worker进程.所以只strace一个worker进程即可.

[sujianhui@dev529 network_security]$>strace -p 19271
strace: Process 19271 attached
epoll_wait(11, [{EPOLLIN, {u32=261448992, u64=94395052680480}}], 512, -1) = 1
accept4(7, {sa_family=AF_INET, sin_port=htons(38612), sin_addr=inet_addr("127.0.0.1")}, [16], SOCK_NONBLOCK) = 4
epoll_ctl(11, EPOLL_CTL_ADD, 4, {EPOLLIN|EPOLLRDHUP|EPOLLET, {u32=261449689, u64=94395052681177}}) = 0
epoll_wait(11, [{EPOLLIN, {u32=261449689, u64=94395052681177}}], 512, 60000) = 1
recvfrom(4, "GET / HTTP/1.1\r\nHost: local.lara"..., 1024, 0, NULL, NULL) = 661
stat("/home/sujianhui/PhpstormProjects/blog/public/", {st_mode=S_IFDIR|0775, st_size=95, ...}) = 0
stat("/home/sujianhui/PhpstormProjects/blog/public/", {st_mode=S_IFDIR|0775, st_size=95, ...}) = 0
stat("/home/sujianhui/PhpstormProjects/blog/public/index.php", {st_mode=S_IFREG|0664, st_size=1731, ...}) = 0
epoll_ctl(11, EPOLL_CTL_MOD, 4, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=261449689, u64=94395052681177}}) = 0
getsockname(4, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
socket(AF_INET, SOCK_STREAM, IPPROTO_IP) = 5
ioctl(5, FIONBIO, [1])                  = 0
epoll_ctl(11, EPOLL_CTL_ADD, 5, {EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLET, {u32=261449457, u64=94395052680945}}) = 0
connect(5, {sa_family=AF_INET, sin_port=htons(9000), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS 
epoll_wait(11, [], 512, 60000)          = 0
...
...
close(9)                                = 0
epoll_wait(11, [], 512, 4943)           = 0
close(4)                                = 0
epoll_wait(11, ^Cstrace: Process 19271 detached
 <detached ...>

提取关键信息

`stat("/home/sujianhui/PhpstormProjects/blog/public/index.php", {st_mode=S_IFREG|0664, st_size=1731, ...}) = 0`

追踪stat可以发现worker寻找/home/sujianhui/PhpstormProjects/blog/public/index.php.到此问题解决.
同理,对于403也可以依循这个解决手段.

5xx系列

5xx系列问题都是出现在php那边.查阅以下nginx的error日志比盲猜更可靠.

猜你喜欢

转载自blog.csdn.net/qq_30549099/article/details/109149979